JVM常用参数和命令汇总


JVM 常见配置汇总:

查看jvm所有参数默认值

java -XX:+PrintFlagsInitial -version

查看jvm所有的参数, 只限于JDK 1.6或以上版本

java -XX:+PrintFlagsFinal -version

统计当前Java版本支持的JVM参数的个数

java -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -version | wc -l

查看当前JVM运行的参数

jinfo -flags <pid>

内存分配相关

参数作用
-Xms初始堆大小,默认是物理内存的1/64,单位为兆 m/M, 例如 -Xms10m
-Xmx最大堆大小,默认是物理内存的1/4,单位为兆 m/M, 例如 -Xmx10m
-Xss-Xss128k,表示可以设置虚拟机栈的大小为128k
-Xoss-Xoss128k,表示设置本地方法栈的大小为128k。不过HotSpot并不区分虚拟机栈和本地方法栈,因此对于HotSpot来说这个参数是无效的
-XX:NewSize=n设置年轻代大小
-XX:PermSize-XX:PermSize=10M,表示JVM初始分配的永久代的容量,必须以m/M为单位
-XX:MaxPermSize=n表示JVM允许分配的永久代的最大容量,必须以m/M为单位,大部分情况下这个参数默认为64M
-XX:NewRatio=n设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatioEden与Survivor区的比例
-XX:+/-UseTLAB是否使用TLAB来创建对象
-XX:PretenureSizeThreshold晋升老年代对象大小

GC相关

参数作用
-Xnoclassgc表示关闭JVM对类的垃圾回收
-XX:+UseSerialGC设置串行收集器
-XX:+UseParallelGC设置并行收集器
-XX:+UseParalledlOldGC设置并行年老代收集器
-XX:+UseConcMarkSwerrpGC设置并发收集器,指定老年代的GC收集器为CMS
-XX:+UseParNewGC指定新生代GC收集器为ParNew
-XX:ParallelGCThreads=n设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数
-XX:MaxGCPauseMillis=n设置并行收集最大暂停时间(以牺牲吞吐量为代价)
-XX:GCTimeRatio=n设置垃圾回收时间占程序运行时间的百分比。GC吞吐量,计算方式为吞吐量=1/(1+n),n为设定的值
-XX:CMSInitiatingOccupancyFraction用于设置触发GC的百分比,在jdk 1.6中,这个值时92%
-XX:+CMSIncrementalMode设置为增量模式。适用于单CPU情况。

垃圾回收统计信息

参数作用
-XX:+PrintGC表示在控制台上打印出GC具体细节
-XX:+UseG1GC表示让JVM使用G1垃圾收集器
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename

异常相关

参数作用
-XX:+HeapDumpOnOutOfMemoryError在出现OOM异常之后自动生成heapdump文件,类似 java_pid*.hprof 文件
-XX:+HeapDumpOnCtrlBreak使用Ctrl+Break键可以让虚拟机生成heapdump文件

总结

Java heap size 设置不合理会引发什么问题?

在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息:java.lang.OutOfMemoryError: Java heap space

如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了。GC占用了更多的时间,而应用分配到的执行时间较少。

Heap size的-Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。

-Xms、-Xmx参数配置

Java 虚拟机在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。但是在实际运行中是不够的,因为需要进行内存扩大。我们可以利用Java 虚拟机提供的-Xms -Xmx等选项可进行设置。

默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
因此服务器一般设置-Xms、-Xmx相等,以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

HeapDumpOnOutOfMemoryError

一. 配置方法

在JAVA_OPTIONS变量中增加

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}。

二. 参数说明

(1)-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。如果不用 HeapDumpPath 选项指定转储路径,则会自动保存到启动目录下。
(2)-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。

特别说明:
不建议内存溢出文件名写死,建议只写路径;否则,再次发生内存溢出,内存溢出文件无法成功保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值