jps jstat jstack jmap jhat命令的使用方式
这些命令都是在jdk的bin目录下,如果未配置环境变量,需要到该目录下使用./命令 来执行。只能查看当前用户下的java进程。
1、jps:来查看java类的应用进程号,进程启动参数,进程类
[ ]$ ./jps -------显示进程号和main方法
387146 Bootstrap
358177 Jps
[ ]$ ./jps -q -------只显示进程号
358191
387146
[ ]$ ./jps -m ----传递给main方法的参数
358206 Jps -m
387146 Bootstrap start
[ ]$ ./jps -l ----输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
387146 org.apache.catalina.startup.Bootstrap
358274 sun.tools.jps.Jps
[ ]$ ./jps -v ---输出传递给JVM的参数
358292 Jps -Dapplication.home=/wls/apache/tomcat/jdk1.7.0_67 -Xms8m
387146 Bootstrap -DserverName=tm_icp-coreSF001 -Xms1024M -Xmx1024M -XX:MaxNewSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:logs/gc.log -Dpafa.log.home=/wls/apache/applogs/tm_icp-coreSF001 -DJVM_DEFAULT_BIND_IP=10.21.5.191 -Dcatalina.base=/wls/apache/servers/tm_icp-coreSF001 -Dcatalina.home=/wls/apache/tomcat/apache-tomcat-7.0.53
[ ]$ ./jps -lmv 显示上面参数的组合
358307 sun.tools.jps.Jps -lmv -Dapplication.home=/wls/apache/tomcat/jdk1.7.0_67 -Xms8m
387146 org.apache.catalina.startup.Bootstrap start -DserverName=tm_icp-coreSF001 -Xms1024M -Xmx1024M -XX:MaxNewSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:logs/gc.log -Dpafa.log.home=/wls/apache/applogs/tm_icp-coreSF001 -DJVM_DEFAULT_BIND_IP=10.21.5.191 -Dcatalina.base=/wls/apache/servers/tm_icp-coreSF001 -Dcatalina.home=/wls/apache/tomcat/apache-tomcat-7.0.53
2、jstat 参数常用几个命令
./jstat -gcutil 387146 1000 5 打印heap信息,387146是pid 1000间隔时间毫秒,5是打印次数
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 18.87 9.19 20.21 59.97 787 18.788 6 1.815 20.604
0.00 18.87 9.22 20.21 59.97 787 18.788 6 1.815 20.604
0.00 18.87 9.23 20.21 59.97 787 18.788 6 1.815 20.604
0.00 18.87 9.23 20.21 59.97 787 18.788 6 1.815 20.604
0.00 18.87 9.30 20.21 59.97 787 18.788 6 1.815 20.604
./jstat -gc 387146 ----完整的gc信息
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
13056.0 13056.0 0.0 2463.5 104960.0 12596.7 917504.0 185470.0 180132.0 108017.4 787 18.788 6 1.815 20.604
jstat -options pid
可以列出当前JVM版本支持的选项,常见的有
- l class (类加载器)
- l compiler (JIT)
- l gc (GC堆状态)
- l gccapacity (各区大小)
- l gccause (最近一次GC统计和原因)
- l gcnew (新区统计)
- l gcnewcapacity (新区大小)
- l gcold (老区统计)
- l gcoldcapacity (老区大小)
- l gcpermcapacity (永久区大小)
- l gcutil (GC统计汇总)
- l printcompilation (HotSpot编译统计)
3、jstack 打印java的threaddump,配合ps -Lfp pid、top -Hp pid ps -mp pid -o THREAD,tid,time cmd来查询线程问题。如果运行在64位JVM上,可能需要指定-J-d64命令选项参数
printf "%x/n" 线程号,转换成dump中对应的十六进制线程号
jstack pid #打印threaddump
jstack -l pid #会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
jstack -m pid #不仅会输出java堆栈信息,还会输出c/c++的堆栈信息
4、jmap打印java的heapdump,与jhat配合使用分析。如果运行在64位JVM上,可能需要指定-J-d64命令选项参数
jmap -premstat pid ---打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息
jmap -heap pid ----查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
jmap -histo[:live] pid---查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jmap -dump:format=b,file=/tmp/dump.dat pid ---用jmap把进程内存使用情况dump到文件中,再用jhat分析查看
5、dump出来的文件可以用jhat、MAT、VisualVM等工具查看
jhat -port 9998 /tmp/dump.dat ---jhat分析dump
注意:如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存,即jhat -J-Xmx512m -port 9998 /tmp/dump.dat。然后就可以在浏览器中输入主机地址:9998查看了