☆☆☆★☆☆☆

唯有努力才能活成自己想要活成的样子

导航

jvm 性能调优、监控工具

jps、jstack、jmap、jhat、jstat、hprof

jps ——输出 jvm 运行状态信息的工具

语法格式:
jps [options] [hostid]  如果不指定 hostid 就默认是当前主机。
可选参数:
-q — 不输出类名、Jar名和传入main方法的参数
-m — 输出传入main方法的参数
-l — 输出main类或Jar的全限名
-v — 输出传入JVM的参数

jstack——某个Java进程内的线程堆栈信息

语法格式:
jstack [option] <pid> (to connect to process)
可选参数:
-F — 强制 dump 线程,通常用于无响应的线程信息的输出
-m — mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)
-l — long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
-h or -help — 打印帮助信息
应用场景一:
java进程中最耗CPU的线程问题
1、通过top -Hp pid找到线程 ID,通过 printf "%x\n"将线程ID 转为16进制值;
2、调用 jstack,grep 线程16进制值查看信息;
3、Jstack -l PID >> log.txt 将所有线程信息输入到指定文件中;

jmap——用于生成heap dump文件

 

语法格式:
jmap [option] <pid>
可选参数
 默认情况 — 打印堆内存 dump 文件内容
-heap — 显示 java 堆详细内容,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
-histo — 显示堆中对象的详细信息
-histo:live — 显示堆中存活对象的详细信息
-permstat — 显示 java 堆内存中永久代类加载器统计信息
-finalizerinfo — 显示在 F-Queue 队列中等待执行 finalizer 方法的对象
-dump — 生成堆内存的转出快照
-F — -dump 没有响应时,强制生成快照
示例
jmap -histo 12158(pid) > a.log  : 查看JVM堆中对象详细占用情况
jmap-histo:live 命令,强制执行 Full GC;如果几次执行后内存明显下降,则基本确认为 Direct ByteBuffer 问题
jmap -heap [pid] : 查看整个JVM内存状态,要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起
jmap -dump:format=b,file=文件名 [pid] : 导出整个JVM 中内存信息

 

jhat——用于生成heap dump文件,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看

使用步骤
1、通过 jmap 输出堆内存的 dump 文件
2、通过 jhat 命令指定端口,即可在浏览器中查看了
打印字段含义
S0C、S1C、S0U、S1U — Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU — Eden区容量和使用量
OC、OU — 年老代容量和使用量
PC、PU — 永久代容量和使用量
YGC、YGT — 年轻代GC次数和GC耗时
FGC、FGCT — Full GC次数和Full GC耗时
GCT — GC总耗时
示例
jhat -J-Xmx512m dump.hprof  主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言,默认访问:localhost:7000
jhat -port 7000 mem.dat

posted on 2023-02-09 17:24  Yr-Zhang  阅读(46)  评论(0编辑  收藏  举报