JVM命令行工具整理

2015-01-02 阅读:

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 1459

jhat

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

参考

标题:JVM命令行工具整理
本文链接:https://blog.frognew.com/2015/01/jvm-cmd-tools.html
转载请注明出处。

目录