jps
jps即JVM Process Status Tool,显示系统上所有的HotSpot虚拟机进程。
jps -lmv
17015 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/home/tomcat/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms2048m -Xmx2048m -Xmn400m -XX:PermSize=512m -XX:ReservedCodeCacheSize=48M -XX:+UseConcMarkSweepGC -Djava.endorsed.dirs=/home/tomcat/tomcat/endorsed -Dcatalina.base=/home/tomcat/tomcat -Dcatalina.home=/home/tomcat/tomcat -Djava.io.tmpdir=/home/tomcat/tomcat/temp- -l 输出main class全名
- -m 输出JVM启动时传递给main方法的参数args
- -v 输出JVM启动时指定的JVM参数
使用jps就可以获取到JVM进程的id,查看已经配置的JVM参数便于使用后边工具进一步分析。
注意使用时需要切换到进程对应的用户
jstat
jstat即JVM statistics Monitoring用于监控JVM运行时状态信息,如GC和类装载的活动信息等。
使用方式jstat [options] pid [interval] [count],其中interval为连续输出的间隔,count为连续输出的次数。
示例:-gcutil打印垃圾回收统计概要
jstat -gcutil 1459 2000
S0 S1 E O P YGC YGCT FGC FGCT GCT
79.92 0.00 71.34 11.07 54.76 334 5.344 4 1.989 7.333
79.92 0.00 72.93 11.07 54.76 334 5.344 4 1.989 7.333示例:-printcompilation打印HotSpot编译方法统计
jstat -printcompilation 1459 2000示例:-compiler打印HotSport JIT编译器统计
jstat -compiler 1459 2000
Compiled Failed Invalid Time FailedType FailedMethod
4936 0 0 64.93 0
4936 0 0 64.93 0更多选项查看jstat。
jmap
jmap 即JVM Memory Map用于生成heap dump文件。 如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让JVM出现OOM的时候,自动生成dump文件。
示例:-heap打印当前heap的概要信息
jmap -heap 1459
Attaching to process ID 1459, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.76-b04
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 4294967296 (4096.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 1073741824 (1024.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 691535872 (659.5MB)
used = 279125240 (266.19457244873047MB)
free = 412410632 (393.30542755126953MB)
40.36308907486436% used
From Space:
capacity = 12058624 (11.5MB)
used = 7871232 (7.506591796875MB)
free = 4187392 (3.993408203125MB)
65.2747112771739% used
To Space:
capacity = 12058624 (11.5MB)
used = 0 (0.0MB)
free = 12058624 (11.5MB)
0.0% used
PS Old Generation
capacity = 1431830528 (1365.5MB)
used = 93733464 (89.39119720458984MB)
free = 1338097064 (1276.1088027954102MB)
6.546407704473808% used
PS Perm Generation
capacity = 228065280 (217.5MB)
used = 128088368 (122.15458679199219MB)
free = 99976912 (95.34541320800781MB)
56.16302841011135% used
33817 interned Strings occupying 3725152 bytes.示例:dump heap
jmap -dump:live,format=b,file=dump.hprof 1459jhat
jhat即JVM Heap Analysis Tool与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。 一般会把dump文件拷贝到单独的机器上使用jhat分析。
jstack
jstack即Stack Trace用于转储 Java进程的栈信息,生成JVM当前时刻的线程快照。
jstack 1459占用CPU过高的线程
打印服务器上的java进程,确定需要分析的JVM的线程ID
jps -lm打印改进程下运行时间过长的线程id:
ps -mp <pid> -o THREAD,tid,time | sort -rn打印线程id的16进制形式:
ps -mp <pid> -o THREAD,tid,time | sort -rn | awk '{printf("%x\n", $8)}'使用jstack选择上面打印的16进制thread id,打印改进程的堆栈信息:
jstack <pid> grep -A 30 <tid>
例如:
jstack 1459 | grep -A 30 37d7