详解Linux下Tomcat开启查看GC信息

2019-10-10 10:28:19刘景俊

② -XX:+UseParallelOldGC

  -XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。

③ -XX:MaxGCPauseMillis=100

  -XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

④ -XX:+UseAdaptiveSizePolicy

  -XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

(2)响应时间优先的并发收集器

① -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

  -XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。

  -XX:+UseParNewGC:设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。

② -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection

  -XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生"碎片",使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。

  -XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片

3、辅助信息

JVM提供了大量命令行参数,打印信息,供调试使用。主要有以下一些:

① -XX:+PrintGC

  输出形式:

  [GC 118250K->113543K(130112K), 0.0094143 secs]

  [Full GC 121376K->10414K(130112K), 0.0650971 secs]

② -XX:+PrintGCDetails

  输出形式:

  [GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]

  [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

③ -XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用

  输出形式:

  11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]

④ -XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用

  输出形式:

  Application time: 0.5291524 seconds

⑤ -XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。可与上面混合使用

  输出形式:

  Total time for which application threads were stopped: 0.0468229 seconds

⑥ -XX:PrintHeapAtGC:打印GC前后的详细堆栈信息

  输出形式:

  34.702: [GC {Heap before gc invocations=7: