常用JVM配置参数
1.Trace跟踪参数
1.1 -verbose:gc
-XX:+printGC
可以打印GC的简要信息
[GC 4790K->374K(15872K), 0.0001606 secs]
[GC 4790K->374K(15872K), 0.0001474 secs]
[GC 4790K->374K(15872K), 0.0001563 secs]
[GC 4790K->374K(15872K), 0.0001682 secs]
1.2-XX:+PrintGCDetails
打印GC详细信息
-XX:+PrintGCTimeStamps
打印CG发生的时间戳
例
[GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374K(15872K), 0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
1.3 -XX:+PrintGCDetails的输出
1.4 -Xloggc:log/gc.log
指定GC log的位置,以文件输出
帮助开发人员分析问题
1.5 -XX:+PrintHeapAtGC
每次一次GC后,都打印堆信息
1.6
-XX:+TraceClassLoading
监控类的加载
1.7 -XX:+PrintClassHistogram
按下Ctrl+Break后,打印类的信息:
分别显示:序号、实例数量、总大小、类型
2.堆的分配参数
2.1-Xmx –Xms
指定最大堆和最小堆
2.2 -XX:+HeapDumpOnOutOfMemoryError
OOM时导出堆到文件
-XX:+HeapDumpPath
2.3 -XX:OnOutOfMemoryError
在OOM时,执行一个脚本
"-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“
当程序OOM时,在D:/a.txt中将会生成线程的dump
可以在OOM时,发送邮件,甚至是重启程序
导出OOM的路径
总结:根据实际事情调整新生代和幸存代的大小
官方推荐新生代占堆的3/8
幸存代占新生代的1/10
在OOM时,记得Dump出堆,确保可以排查现场问题
3.永久区的分配参数
-XX:PermSize -XX:MaxPermSize
设置永久区的初始空间和最大空间
他们表示,一个系统可以容纳多少个类型