Java Profile

通常进行系统问题定位的时候,可以通过一些数据进行分析。数据包括:运行日志、异常堆栈、GC日志、线程的快照(threaddump/javacore文件)、堆转存快照(heapdump/hprof文件)等。

这里简单介绍一下Java性能诊断的常规工具。

1.jps (JVM Process Status Tool),显示指定系统内所有的Hotspot虚拟机进程。
用法:jsp -v

-m 输出虚拟进程启动时传递给主类main()函数的参数  
-l 输出主类全名,如果进行执行的是jar包,输出jar路径  
-v 输出虚拟机进程启动时JVM参数

2.jstat: 观察GC情况

jstat -gc pid 2000  
jstat -gcutil pid 2000

[jstat - Java Virtual Machine Statistics Monitoring Tool](http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html)

或者使用top, ps aux 查看总的内存占用情况

3.jinfo 查看与调整虚拟机的各项参数

    jinfo -h  
    Usage:  
        jinfo [option]   
            (to connect to running process)  
        jinfo [option]   
            (to connect to a core file)  
        jinfo [option] [server_id@]  
            (to connect to remote debug server) 

    where 

4.jmap ,查看 heap 情况,如查看存活对象列表

jmap -histo:live pid|grep com.company|less

或者dump 内存来分析

jmap -dump:file=test.bin pid

jmap 查看Java堆的详细信息

jmap -heap pid    

5.分析dump 堆文件,可以用jhat:

jhat test.bin

分析完成后可以用浏览器查看堆的情况。
还可以用 Eclipse Memory Analyzer (MAT)工作进行分析,或者IBM的Heap Analyzer.

6.jstack : Java堆栈跟踪工具

jstack pid > thread_dump 

jstack -l 除了堆栈以外显示关于锁的附加信息

7.jvisualvm 和 jconsole, JVM 自带的图形化工具

8.Btrace

####参考资料