- jps命令
列出所有Java进程,输出如下:
jps -q | 只输出进程id |
jps -m | 输出传递给Java进程(主函数)的参数 |
jps -m -l | -l用于输出主函数的完整路劲 |
jps -m -l -v | -v显示传递给JVM的参数 |
2.jstat命令
可以观察Java应用程序运行时信息的工具,可以查看堆信息的详细情况
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
option解释:
-class | 显示ClassLoader的相关信息 |
-compiler | 显示JIT编译的相关信息 |
-GC |
与GC相关的堆信息 |
-gccause | 垃圾收集相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因 |
-gcnew |
新生代信息 |
-gcnewcapacity |
新生代大小与使用情况 |
-gcold | 老年代和永久代的信息 |
-gcoldcapacity | 老年代大小 |
-gcpermcapacity | 永久代大小 |
-gcutil | 垃圾收集信息 |
-printcompilation | 输出JIT编译的方法信息 |
-t 参数可以在输出信息前加上一个Timestamp列,显示程序运行时间。
-h 在周期性数据输出时,输出多少行数据后,跟着输出一个表头信息。
interval 输出统计数据的周期,单位毫秒。
count指定一共输出多少次数据。
例如:
(1)进程7572 的ClassLoader的相关信息,每秒钟统计一次,输出2次。
loaded:载入类的数量。 Bytes:载入类的合计大小。
Unloaded:卸载类的数量 。 Bytes:卸载类的合计大小。
Time:加载和卸载类所花费的时间。
(2)查看JIT编译信息
Compiled:编译任务执行的次数。 Failed:编译失败的次数
Invalid:编译不可用的次数。 FailedType:最后一次编译失败的类型。
FailedMethod:最后一次编译失败的类名和方法名。
(3)与GC相关的堆信息
S0C | s0(from)的大小(KB) | S1C | s1(from)的大小(KB) | S0U |
s0(from)已使用空间(KB) |
EC | eden区的大小(KB) | EU | eden区已使用空间(KB) | S1U | s1(from)已使用空间(KB) |
OC | 老年代大小(KB) | OU | 老年代已使用空间(KB) | PC | 永久区大小(KB) |
YGC | 新生代GC次数 | YGCT | 新生代GC耗时 | PU | 永久区已使用大小(KB) |
FGC | full GC次数 | FGCT | full GC耗时 | GCT | GC总耗时 |
(4)与gccapacity相关,包括了各个代的最值,单位(KB)。
NGCMN | 新生代最小值 | NGCMX | 新生代最大值 | NGC | 当前新生代大小 |
OGCMN | 老年代最小值 | OGCMX | 老年代最大值 | ||
PGCMN | 永久代最小值 | PGCMX | 永久代最大值 |
(5)显示最近一次GC的原因及当前GC的原因
◇LGCC:上次GC的原因。 ◇GCC:当前GC的原因。
图中显示,最近一次GC是由于显示的System.gc()调用所引起的。当前时刻未进行GC。
(6)-gcnew查看新生代的一些详细信息。
◇TT:新生代对象晋升到老年代对象的年龄。
◇MTT:新生代对象晋升到老年代对象的年龄最大值。
◇DSS:所需的survivor区大小。
(7)-gcnewcapacity详细输出新生代各个区的大小信息:
◇S0CMX:s0区的最大值(KB)。
◇S1CMX:s1区的最大值(KB)。
◇ECMX:eden区的最大值(KB)。
(8)-gcold展现老年代GC的概况。
(9)-gcutil:展示GC回收相关信息。
S0 | s0区使用的百分比 | S1 | s1区使用的百分比 | E | eden区使用的百分比 |
O | old区使用的百分比 | P | 永久区使用的百分比 |
3.jinfo:查看运行时某一个JVM参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。
jinfo <option> <pid>
option说明:
☆-flag<name>:打印指定JVM的参数值。
☆-flag[+|-]<name>:打印指定JVM参数的布尔值。
☆-flag<name>=<value>:设置指定JVM的参数值。
(1)jinfo -flags pid打印该进程的JVM参数
(2)显示是否打印GC详细信息,下例显示通过jinfo对PrintGCDetails参数的修改,他可以在java程序运行时关闭或者打开这个开关。
4.jmap:生成Java应用程序的堆快照和对象的统计信息;
使用:
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [[email protected]]remote-hostname-or-IP
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)基本参数:
☆-dump:[live,]format=b,file=<filename> :使用hprof二进制形式,输出jvm的heap内容到文件=. live 子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
☆-finalizerinfo :打印正等候回收的对象的信息.
☆-heap :打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
☆-histo[:live] :打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上 缀”*”. 如果live子参数加上后,只统计活的对象数量.
☆-permstat :打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父 classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
☆-F :强迫在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
☆-h | -help :打印辅助信息
☆-J :传递参数给jmap启动的jvm.
(1)jmap -histo pid >路劲 :生成pid的Java程序对象统计信息,并输出到文件中。
输出了内存中的实例数量和合计。
(2)jmap -dump:format=b,file=路劲 pid:导出Java应用程序的当前堆快照,要使用Visual VM打开,或者使用jhat命令。
5.jhat命令
用于分析Java应用程序的堆快照内容:
下例是分析上文生成的堆快照
jhat分析完成后,使用HTTP服务器展示其分析结果,在浏览器中访问http://127.0.0.1:7000
jhat服务器显示了所有非平台类信息。点击链接进入,可以查看类的超类、ClassLoader以及该类的实例等信息。
页面底部,jhat为开发人员提供了其他查询方式
通过这些链接,开发者可以进一步查看所有类信息、所有类的实例数量以及实例的具体信息。
最后有一个链接指向OQL查询界面
在方框中输入查询信息,查询格式可以点击OQL Help进入进行参考,如下图所示,
在方框中输入查询语句可以查询到相应的信息:如下图所示
6.jstack命令
导出java应用程序的线程堆栈
使用: jstack [-l] <pid> [文件路劲]