使用jvisualvm与jconsole可以实时监控java程序的运行状态。
可是咱们并不会一直盯着输入屏幕,或者说开着一个客户端一直抓取服务器的运行信息。相对来讲,可以让java程序在运行的时候自动生成日志,而后咱们再对生成的数据进行分析是比较不错的选择。java
打印gc详细信息tomcat
-XX:+PringGCDetails
带有距离JVM开始运行的时间戳安全
-XX:+PrintGCTimeStamps
带有日历时间戳服务器
--XX:+PringGCDateStamps
指定gc日志存放文件(不指定则控制台打印)svn
-Xloggc:
针对高延迟问题调优HotSpot VM时,下面两个命令行选项特别有用,经过它们能够得到应用程序因为执行VM安全操做而阻塞的时间以及两个安全点操做之间应用程序运行的时间。工具
-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的文件可以自给建立,目录得先建立好。spa
拿到了日志,拿眼睛看也是怪累的,并且不拿本教程对着看各个参数时什么意思还真不怎么看得懂。过段时间又忘了什么意思。。。.net
关键时“海量”的数据,眼睛哪看的过来,还需须要将日志转化成像jconsole、jvisualvm同样的图形化看着才方便。
这个工具好像据说比较强大,因此我也写上。
工程的地址在:https://java.net/projects/gchisto
svn源码放在:https://svn.java.net/svn/gchisto~svn
然而,虽然它强大,可是我用它分析日志的时候并无识别出来。
我如今也没搞清楚是哪里出了问题.若是有会用的前辈还请指导指导.
推荐一个分析gc日志的网址:http://gceasy.io/
只要上传日志文件就可以给出好多有用的分析数据出来。感受仍是很好用的。
后面还会根据这个网站的日志分析作出性能调优。