jvm参数设置
Posted 一米阳光zw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm参数设置相关的知识,希望对你有一定的参考价值。
指令执行环境
CentOS7.6 + JDK8 + JVM 25.171-b11 + RAM16G
JVM参数分类
- 标准参数:以 “
-
“ 开头的参数,标准参数是指在各个 JVM 版本中基本保持不变,相对比较稳定 - 非标准参数:以 “
-X
“ 开头的参数,非标准参数表示不保证所有 JVM 实现都支持这些参数,在将来的 JVM 版本中可能会发生改变 - 不稳定参数:以”
-XX
“ 开头的参数,不稳定参数这是我们日常开发中接触到最多的参数类型,也是非标准化参数,相对来说不稳定,随着 JVM 版本的变化可能会发生变化,主要用于 JVM 调优和 debug。
JVM常用指令熟悉
- 查看java默认的垃圾收集器类型,显示信息如下,代表当前使用的垃圾收集器是UseParallelGC(默认),InitialHeapSize等参数的单位是kb
java -XX:+PrintCommandLineFlags -version
垃圾收集器类型对照表
- 调优工具jmap,显示Java堆详细信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息
jmap -heap pid
完整信息打印
[root@luntek certificate]# jmap -heap 28790
Attaching to process ID 28790, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11
using thread-local object allocation.
Parallel GC with 2 thread(s) ##新生代采用的是并行线程处理方式
Heap Configuration: ##堆配置情况,也就是JVM参数配置的结果[平常说的tomcat配置JVM参数,就是在配置这些]
MinHeapFreeRatio = 0 ##最小堆使用比例,如果HeapFreeRatio < MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后
MaxHeapFreeRatio = 100 ##空闲堆空间的最大百分比,如果HeapFreeRatio>MaxHeapFreeRatio,则需要进行堆缩容,缩容的时机应该在每次垃圾回收之后
MaxHeapSize = 4164943872 (3972.0MB) # JVM 堆空间允许的最大值
NewSize = 87031808 (83.0MB) # JVM 新生代堆空间的默认值
MaxNewSize = 1388314624 (1324.0MB) # JVM 新生代堆空间允许的最大值
OldSize = 175112192 (167.0MB) #JVM 老年代堆空间的默认值
NewRatio = 2 #新生代(2个Survivor区和Eden区 )与老年代(不包括永久区)的堆空间比值,表示新生代:老年代=1:2
SurvivorRatio = 8 # 两个Survivor区和Eden区的堆空间比值为 8,表示 S0 : S1 :Eden = 1:1:8
MetaspaceSize = 21807104 (20.796875MB) # JVM 元空间的默认值
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB # JVM 元空间允许的最大值
G1HeapRegionSize = 0 (0.0MB) # 在使用 G1 垃圾回收算法时,JVM 会将 Heap 空间分隔为若干个 Region,该参数用来指定每个 Region 空间的大小
Heap Usage:
PS Young Generation ##新生代(伊甸区Eden区 + 幸存区survior(1+2)空间)
Eden Space:
capacity = 56098816 (53.5MB) ##伊甸区容量
used = 33937536 (32.3653564453125MB)
free = 22161280 (21.1346435546875MB)
60.4959933557243% used
From Space: ##survior1区
capacity = 2097152 (2.0MB)
used = 2091104 (1.994232177734375MB)
free = 6048 (0.005767822265625MB)
99.71160888671875% used
To Space: ##survior2 区
capacity = 3670016 (3.5MB)
used = 0 (0.0MB)
free = 3670016 (3.5MB)
0.0% used
PS Old Generation ##老年代使用情况
capacity = 326107136 (311.0MB) ##老年代容量
used = 154693088 (147.52682495117188MB)
free = 171414048 (163.47317504882812MB)
47.43627811934787% used
47365 interned Strings occupying 4855464 bytes.
- 检查已在的java进程(PID=28790)是否启用了PrintGCDetails标识,-PrintGCDetails标识未开启,默认不开启
jinfo -flag PrintGCDetails 28790
- jinfo相关命令
# 查看正在运行的java进程的参数是否开启,值是多少
jinfo -flags 28790
## 查看已在的java进程(PID=22945)的MetaspaceSize设置
jinfo -flag MetaspaceSize 28790
JVM参数设置
nohup java -jar test-0.0.1-SNAPSHOT.jar -Xmx4g -Xms4g -Xmn1512m -Duser.timezone=GMT+8 -XX:+PrintGCDateStamps -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction -XX:+CMSParallelRemarkEnabled -verbose:gc -XX:+PrintGCDetails -Xloggc:./logs/gc.log --spring.profiles.active=pro &
-Duser.timezone=GMT+8:设置jvm中的时区
-XX:+PrintGCDateStamps:设置日志开启时间戳
-XX:+UseParNewGC:设置年轻代为并行收集
-XX:+UseConcMarkSweepGC:设置老年代CMS内存收集
-XX:CMSInitiatingOccupancyFraction:使用cms作为垃圾回收使用70%后开始CMS收集
-XX:+CMSParallelRemarkEnabled:降低标记停顿
-verbose:gc:输出虚拟机中GC的详细情况
-XX:+PrintGCDetails:输出格式
-Xloggc:./logs/gc.log:日志输出位置
-Xmx4g:最大内存,物理内存的四分之一
-Xms4g:分配的内存,初始化期物理内存的1/64,最大为1 GB
-Xmn1512m
以上是关于jvm参数设置的主要内容,如果未能解决你的问题,请参考以下文章