在Tomcat中开启JVM GC日志收集

Tomcat环境变量设置

在tomcat的安装目录的bin目录下,编辑一个名为setenv.sh的文件(如果没有请创建),在环境变量名字为 CATALINA_OPTS的变量其中添加:

XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:/var/log/jvm/`date +"%Y-%m-%d"`_gc.log          

可以参考:

export CATALINA_OPTS=" -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote=true -Djava.security.egd=file:/dev/./urandom -Xms512M -Xmx4096M -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:/var/log/jvm/`date +"%Y-%m-%d"`_gc.log"                     

日志切割设置

过于大的log文件会使分析变得较为困难,因此我们需要定时的去切割日志文件。

到/etc/logrotate.d新创建一个文件,就叫jvm吧:

/var/log/jvm/*.log {
        rotate 300
        size = 500M
        dateext
        missingok
}

参考资料:Linux 下 logrotate 日志轮询操作梳理

日志分析工具

用肉眼扫描JVM的GC日志文件算是一件痛苦的事情,我们可以借助一些工具来辅助我们,推荐如下:

(0)gceasy.io

  • http://gceasy.io/

参考文章:http://www.jianshu.com/p/72b6e306b9c7

(1)GCHisto

http://java.net/projects/gchisto


直接点击gchisto.jar就可以运行,点add载入gc.log
统计了总共gc次数,youngGC次数,FullGC次数,次数的百分比,GC消耗的时间,百分比,平均消耗时间,消耗时间最小最大值等

在Tomcat中开启JVM GC日志收集_第1张图片

统计的图形化表示

在Tomcat中开启JVM GC日志收集_第2张图片

YoungGC,FullGC不同消耗时间上次数的分布图,勾选可以显示youngGC或fullGC单独的分布情况

在Tomcat中开启JVM GC日志收集_第3张图片

整个时间过程详细的gc情况,可以对整个过程进行剖析

在Tomcat中开启JVM GC日志收集_第4张图片

(2)GCLogViewer


http://code.google.com/p/gclogviewer/


点击run.bat运行


整个过程gc情况的趋势图,还显示了gc类型,吞吐量,平均gc频率,内存变化趋势等
Tools里还能比较不同gc日志


在Tomcat中开启JVM GC日志收集_第5张图片

(3)HPjmeter


获取地址 http://www.hp.com/go/java参考文档 http://www.javaperformancetuning.com/tools/hpjtune/index.shtml


工具很强大,但只能打开由以下参数生成的GC log, -verbose:gc -Xloggc:gc.log,添加其他参数生成的gc.log无法打开。

(4)GCViewer

http://www.tagtraum.com/gcviewer.html
这个工具用的挺多的,但只能在JDK1.5以下的版本中运行,1.6以后没有对应。

(5)garbagecat

http://code.google.com/a/eclipselabs.org/p/garbagecat/wiki/Documentation

其它监控方法
Jvisualvm动态分析jvm内存情况和gc情况,插件:visualGC

在Tomcat中开启JVM GC日志收集_第6张图片

在Tomcat中开启JVM GC日志收集_第7张图片

jvisualvm还可以heapdump出对应hprof文件(默认存放路径:监控的服务器 /tmp下),利用相关工具,比如HPjmeter可以对其进行分析
grep Full gc.log粗略观察FullGC发生频率
jstat –gcutil [pid] [intervel] [count]
jmap -histo pid可以观测对象的个数和占用空间jmap -heap pid可以观测jvm配置参数,堆内存各区使用情况
jprofiler,jmap dump出来用MAT分析

你可能感兴趣的:(在Tomcat中开启JVM GC日志收集)