JVM命令行工具整理
📅 2015-01-02 | 🖱️
jps #
jps即JVM Process Status Tool,显示系统上所有的HotSpot虚拟机进程。
1jps -lmv
217015 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打印垃圾回收统计概要
1 jstat -gcutil 1459 2000
2 S0 S1 E O P YGC YGCT FGC FGCT GCT
3 79.92 0.00 71.34 11.07 54.76 334 5.344 4 1.989 7.333
4 79.92 0.00 72.93 11.07 54.76 334 5.344 4 1.989 7.333
示例:-printcompilation打印HotSpot编译方法统计
1 jstat -printcompilation 1459 2000
示例:-compiler打印HotSport JIT编译器统计
1jstat -compiler 1459 2000
2Compiled Failed Invalid Time FailedType FailedMethod
3 4936 0 0 64.93 0
4 4936 0 0 64.93 0
更多选项查看jstat。
jmap #
jmap 即JVM Memory Map用于生成heap dump文件。 如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让JVM出现OOM的时候,自动生成dump文件。
示例:-heap打印当前heap的概要信息
1 jmap -heap 1459
2Attaching to process ID 1459, please wait...
3Debugger attached successfully.
4Server compiler detected.
5JVM version is 24.76-b04
6
7using thread-local object allocation.
8Parallel GC with 4 thread(s)
9
10Heap Configuration:
11 MinHeapFreeRatio = 0
12 MaxHeapFreeRatio = 100
13 MaxHeapSize = 4294967296 (4096.0MB)
14 NewSize = 1310720 (1.25MB)
15 MaxNewSize = 17592186044415 MB
16 OldSize = 5439488 (5.1875MB)
17 NewRatio = 2
18 SurvivorRatio = 8
19 PermSize = 21757952 (20.75MB)
20 MaxPermSize = 1073741824 (1024.0MB)
21 G1HeapRegionSize = 0 (0.0MB)
22
23Heap Usage:
24PS Young Generation
25Eden Space:
26 capacity = 691535872 (659.5MB)
27 used = 279125240 (266.19457244873047MB)
28 free = 412410632 (393.30542755126953MB)
29 40.36308907486436% used
30From Space:
31 capacity = 12058624 (11.5MB)
32 used = 7871232 (7.506591796875MB)
33 free = 4187392 (3.993408203125MB)
34 65.2747112771739% used
35To Space:
36 capacity = 12058624 (11.5MB)
37 used = 0 (0.0MB)
38 free = 12058624 (11.5MB)
39 0.0% used
40PS Old Generation
41 capacity = 1431830528 (1365.5MB)
42 used = 93733464 (89.39119720458984MB)
43 free = 1338097064 (1276.1088027954102MB)
44 6.546407704473808% used
45PS Perm Generation
46 capacity = 228065280 (217.5MB)
47 used = 128088368 (122.15458679199219MB)
48 free = 99976912 (95.34541320800781MB)
49 56.16302841011135% used
50
5133817 interned Strings occupying 3725152 bytes.
示例:dump heap
1jmap -dump:live,format=b,file=dump.hprof 1459
jhat #
jhat即JVM Heap Analysis Tool与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。 一般会把dump文件拷贝到单独的机器上使用jhat分析。
jstack #
jstack即Stack Trace用于转储 Java进程的栈信息,生成JVM当前时刻的线程快照。
1jstack 1459
占用CPU过高的线程 #
打印服务器上的java进程,确定需要分析的JVM的线程ID
1jps -lm
打印改进程下运行时间过长的线程id:
1ps -mp <pid> -o THREAD,tid,time | sort -rn
打印线程id的16进制形式:
1ps -mp <pid> -o THREAD,tid,time | sort -rn | awk '{printf("%x\n", $8)}'
使用jstack选择上面打印的16进制thread id,打印改进程的堆栈信息:
1jstack <pid> grep -A 30 <tid>
2例如:
3jstack 1459 | grep -A 30 37d7