1. Jps
1.1 简介
用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。使用jps时,不需要传递进程号做为参数。
Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启了jstat服务,以及RMI注及服务,不过常用都是对本对的JAVA进程的查看。 1.2 命令格式 命令格式
jps [ options ] [ hostid ] 1.3 常用参数说明 常用参数说明
-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。 -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。 -v 输出传给JVM的参数 1.4 使用 1.4.1 jps –ml
查到java进程后用top命令查看其下面的线程的情况: top -H -p 10349 1.4.2 jps –v
2. Jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项\,Windows的jstack使用方式只支持以下的这种方式: jstack [-l] pid
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。 2.1 命令格式
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP 2.2 常用参数说明 1)、options:
executable Java executable from which the core dump was produced. (可能是产生core dump的java可执行程序)
core 将被打印信息的core dump文件
remote-hostname-or-IP 远程debug服务的主机名或ip server-id 唯一id,假如一台主机上多个远程debug服务 2)、基本参数:
-F当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m打印java和native c/c++框架的所有栈信息. -h | -help打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps查询. 2.3 使用例子 2.3.1 打印锁信息
jstack -l 10349 > /tmp/p_10349.txt 如果执行该命令得到如下错误: jstack -J-d64 -l 3565
3565: well-known file is not secure 或者:
Unable to open socket file: target process not responding or HotSpot VM not loaded 那么是执行jstack的命令时的用户和java进程执行的用户不相同,切换到java进程执行用户下执行jstack命令就好了。 2.3.2 Jstack分析cpu过高的线程 1> 用jps查找有哪些java进程
2> 用top -H -p pid 查看线程运行情况,发现那个线程cpu过高 3> 知道这个线程的pid然后计算该pid的16进制数 4> 用jstack –l pid >/tmp/tpid.txt
5> grep -A 10 ―pid的16进制数‖ /tmp/tpid.txt.
grep 的-A参数查看所在行的后10行
3. Jstat
3.1 简介
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。由于JVM内存设置较大,图中百分比变化不太明显一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。
它主要是用来显示GC及PermGen相关的信息,如果对GC不怎么了解,先看这篇文章:http://blog.csdn.net/fenglibing/archive/2011/04/13/6321453.aspx,否则其中即使你会使用jstat这个命令,你也看不懂它的输出。
3.2 命令格式
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ] 3.3 参数说明
1)、generalOption:单个的常用的命令行选项,如-help, -options, 或 -version。 2)、outputOptions:一个或多个输出选项,由单个的statOption选项组件,可以-t, -h, and -J选项配合使用。 statOption: -class Option -compiler Option -gc Option
-gccapacity Option -gccause Option -gcnew Option
-gcnewcapacity Option -gcold Option
-gcoldcapacity Option -gcpermcapacity Option -gcutil Option
-printcompilation Option
注:其中最常用的就是-gcutil选项了,因为他能够给我们展示大致的GC信息。 Option:指的是vmid、显示间隔时间及间隔次数等 vmid — VM的进程号,即当前运行的java进程号 interval– 间隔时间,单位为秒或者毫秒 count — 打印次数,如果缺省则打印无数次 3)、jstat命令输出参数说明
S0 — Heap上的 Survivor space 0 区已使用空间的百分比 S0C:S0当前容量的大小 S0U:S0已经使用的大小
S1 — Heap上的 Survivor space 1 区已使用空间的百分比 S1C:S1当前容量的大小 S1U:S1已经使用的大小
E — Heap上的 Eden space 区已使用空间的百分比 EC:Eden space当前容量的大小 EU:Eden space已经使用的大小
O — Heap上的 Old space 区已使用空间的百分比 OC:Old space当前容量的大小 OU:Old space已经使用的大小
P — Perm space 区已使用空间的百分比 PC:Perm space当前容量的大小 PU:Perm space已经使用的大小
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒) FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC 3.4 使用例子
1>jstat -class pid:显示加载class的数量,及所占空间等信息 $ jstat -class 10968 100 2
Loaded Bytes Unloaded Bytes Time 3655 10933.8 105 217.7 8.13 3655 10933.8 105 217.7 8.13 2>jstat -compiler pid:显示VM实时编译的数量等信息 $ jstat -compiler 10968 100 2
Compiled Failed Invalid Time FailedType FailedMethod
1139 1 0 31.47 1 sun/misc/URLClassPath getResource
1139 1 0 31.47 1 sun/misc/URLClassPath getResource 3>gc 堆栈情况
$ jstat -gcnew 10968 100 2
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 9152.0 640.0 0.0 0.0 1 15 9152.0 244288.0 16141.5 591 17.976 9152.0 640.0 0.0 0.0 1 15 9152.0 244288.0 16141.5 591 17.976 $ jstat -gc 10968 100 5
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
9152.0 640.0 0.0 0.0 244288.0 30882.9 2809856.0 224764.5 131072.0 40688.0 591 17.976 55 18.126 36.102
9152.0 640.0 0.0 0.0 244288.0 30882.9 2809856.0 224764.5 131072.0 40688.0 591 17.976 55 18.126 36.102
9152.0 640.0 0.0 0.0 244288.0 30882.9 2809856.0 224764.5 131072.0 40688.0 591 17.976 55 18.126 36.102
9152.0 640.0 0.0 0.0 244288.0 30882.9 2809856.0 224764.5 131072.0 40688.0 591 17.976 55 18.126 36.102
9152.0 640.0 0.0 0.0 244288.0 30882.9 2809856.0 224764.5 131072.0 40688.0 591 17.976 55 18.126 36.102 $ jstat -gcutil -h5 10968 4s 10
S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 0.00 19.23 8.00 31.04 591 17.976 55 18.126 36.102 0.00 0.00 19.23 8.00 31.04 591 17.976 55 18.126 36.102 说明:
-h每5行一显示 10968:是进程号
4s:表示每隔4秒收集一次信息当然也可以毫秒:ms 10:表示共搜集10次。 所以分成两页显示:10/5
4. Jmap
4.1 简介
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其
相关推荐: