使用jvisualvm与jconsole能够实时监控java程序的运行状态。
但是我们并不会一直盯着输入屏幕,或者说开着一个客户端一直抓取服务器的运行信息。相对来说,能够让java程序在运行的时候自动生成日志,然后我们再对生成的数据进行分析是比较不错的选择。
收集日志
打印Gc日志的参数
打印gc详细信息
-XX:+PringGCDetails
-XX:+PringGCDetails
带有距离JVM开始运行的时间戳
-XX:+PrintGCTimeStamps
-XX:+PrintGCTimeStamps
带有日历时间戳
--XX:+PringGCDateStamps
指定gc日志存放文件(不指定则控制台打印)
-Xloggc:
针对高延迟问题调优HotSpot VM时,下面两个命令行选项特别有用,通过它们可以获得应用程序由于执行VM安全操作而阻塞的时间以及两个安全点操作之间应用程序运行的时间。
-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime
何谓安全操作:安全操作使JVM进入到一种状态:所有的java应用线程都被阻塞、执行本地代码的线程都被禁止返回VM执行Java代码。安全操作常用于虚拟机需要进行内部操作时,此时所有的Java线程都被显式地置于阻塞状态且不能修改Java堆的情况。
设置参数
Tomcat
$CATALINA_HOME/bin/setenv.sh文件
加入:
#opts for gc logexport CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDetails"export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCTimeStamps"export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDateStamps"export CATALINA_OPTS="$CATALINA_OPTS -Xloggc:/gc_logs/tomcat.gc.log"
当然,loggc的文件能够自给创建,目录得先创建好。
分析日志
拿到了日志,拿眼睛看也是怪累的,而且不拿本教程对着看各个参数时什么意思还真不怎么看得懂。过段时间又忘了什么意思。。。
关键时“海量”的数据,眼睛哪看的过来,还需需要将日志转化成像jconsole、jvisualvm一样的图形化看着才方便。
gchistro0
这个工具好像听说比较强大,所以我也写上。
工程的地址在:https://java.net/projects/gchisto
svn源码放在:https://svn.java.net/svn/gchisto~svn
然而,虽然它强大,但是我用它分析日志的时候并没有识别出来。
我现在也没搞清楚是哪里出了问题.如果有会用的前辈还请指导指导.
gceasy
推荐一个分析gc日志的网址:http://gceasy.io/
只要上传日志文件就能够给出好多有用的分析数据出来。感觉还是很好用的。
后面还会根据这个网站的日志分析做出性能调优。
转载于: