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参数设置的主要内容,如果未能解决你的问题,请参考以下文章

java jvm内存管理/gc策略/参数设置

设置JVM参数,查看堆大小

JVM系列三:JVM参数设置分析

在 JVM 上设置默认参数

如何设置JVM参数

java jvm内存可以设置多少