1. jmap 命令
jmap 命令可以获得运行中的 jvm 的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等。
1.1. jmap -dump:[live,]format=b,file=<filename> pid
live 参数可选,指明是活着的对象
format 文件格式
file 指定堆文件名
1.2. -finalizerinfo
打印等待回收对象的信息
1.3. -heap 打印堆总结
1.4. -histo[:live] 打印堆的对象统计,包括对象数、内存大小等等
# instance 是对象的实例个数
#bytes 是总占用的字节数
class name 对应的就是 Class 文件里的 class 的标识
B 代表 byte
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有“ [ ”代表数组,“ [I ” 就相当于“ int[] ”
对象用“ [L+ ”类名表示
1.5. -permstat 打印 java 堆 perm 区的 classloader 统计
1.6. -F 强制,在 jmap -dump 或 jmap -histo 中使用,如果 pid 没有相应的回复
1.7. -J 提供 jvm 选项,如: -J-Xms256m
2. jhat 命令
查看 java 堆文件,先用 jmap 导出堆文件
3. jstack
观察 jvm 中当前所有线程的运行情况和线程当前状态
查看 cpu 负载过高的方法:首先输入 top 命令,然后输入 shift+h ,观察占用 cpu 高的线程,记录下此 pid ,然后转换成 16 进制,用 jstack pid 导出线程堆栈,然后查找 nid 和先前转换的 16 进制相同的线程。
4. jconsole
配置参数 :
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.36
5. jinfo
观察运行中的 java 程序的运行环境参数:参数包括 Java System 属性和 JVM 命令行参数
6. jps
列出所有的 jvm 实例
7. jstatd
启动 jvm 监控服务。它是一个基于 rmi 的应用,向远程机器提供本机 jvm 应用程序的信息。默认端口 1099 。
实例: jstatd -J-Djava.security.policy=my.policy
my.policy 文件需要自己建立,内如如下
grant codebase "file:$JAVA_HOME/lib/tools.jar" {
permission java.security.AllPermission;
};
这是安全策略文件,因为 jdk 对 jvm 做了 jaas 的安全检测,所以我们必须设置一些策略,使得 jstatd 被允许作网络操作
8. jstat
8.1. -class
统计 class loader 行为信息
jstat -class 23300 1000 10 (每隔 1 秒监控一次,一共做 10 次)
l Loaded : Number of classes loaded.
l Bytes : Number of Kbytes loaded.
l Unloaded : Number of classes unloaded.
l Bytes : Number of Kbytes unloaded.
l Time : Time spent performing class load and unload operations.
8.2. -compile
统计编译行为信息
8.3. -gc
统计 jdk gc 时 heap 信息
jstat -gc 23300 2000 20 (每隔 2 秒监控一次,共做 10 )
l S0C : Current survivor (存活的) space 0 capacity (KB).
l EC : Current eden space capacity (KB).
l EU : Eden space utilization (KB).
l OC : Current old space capacity (KB).
l OU : Old space utilization (KB).
l PC : Current permanent space capacity (KB).
l PU : Permanent space utilization (KB).
l YGC : Number of young generation GC Events.
l YGCT : Young generation garbage collection time.
l FGC : Number of full GC events.
l FGCT : Full garbage collection time.
l GCT : Total garbage collection time.
8.4. -gccapacity
统计不同的 generations (不知道怎么翻译好,包括新生区,老年区, permanent 区)相应的 heap 容量情况
8.5. -gccause
统计 gc 的情况,(同 -gcutil )和引起 gc 的事件
jstat -gccause 23300
l S0 : Survivor space 0 utilization as a percentage of the space's current capacity.
l S1 : Survivor space 1 utilization as a percentage of the space's current capacity.
l E : Eden space utilization as a percentage of the space's current capacity.
l O : Old space utilization as a percentage of the space's current capacity.
l P : Permanent space utilization as a percentage of the space's current capacity.
l YGC : Number of young generation GC events.
l YGCT : Young generation garbage collection time.
l FGC : Number of full GC events.
l FGCT : Full garbage collection time.
l GCT : Total garbage collection time.
l LGCC : Cause of last Garbage Collection.
l GCC : Cause of current Garbage Collection.
8.6. -gcnew
统计 gc 时,新生代的情况
8.7. -gcnewcapacity
统计 gc 时,新生代 heap 容量
8.8. -gcold
统计 gc 时,老年区的情况
8.9. -gcoldcapacity
统计 gc 时,老年区 heap 容量
8.10. -gcpermcapacity
统计 gc 时, permanent 区 heap 容量
8.11. -gcutil
统计 gc 时, heap 情况
8.12. -printcompilation
不知道干什么的,一直没用过。