jvm分析笔记
jvm分析笔记
- jmap
jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
命令:jmap -dump:format=b,file=heap.bin [pid]
dump出活动的堆信息:
jmap -dump:live,format=b,file=heap.bin [pid]
jmap -heap pid : 查看堆的使用状况信息
jmap -histo:live pid| less :堆中活动的对象以及大小
- jstack
jstack是用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内存每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因。
jstack ( 查看jvm线程运行状态,是否有死锁现象等等信息);
命令:jstack -l [pid]
1.jstack 线程信息以日志输出到文件将日志输出到 js.log 文件中
jstack 11 >js.log
2.统计
线程总数
grep “Thread.State” js.log | wc -l
线程的状态及数量
grep “java.lang.Thread.State” js.log | awk ‘{print$2$3$4$5}’|uniq -c
- jstat
//gc 情况统计打印,每1秒钟打印一次
jstat -gcutil [pid] 1000
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
//获取类加载所占用的资源信息
jstat -class [pid]
jinfo
JConsole
查询当前活动中的线程数:
命令:jps
返回进程id:12
则执行:
ls /proc/12/task | wc -l
返回:
705个活动线程
查看占用操作系统内存情况:
1, jps
2, ps aux | egrep “MEM|12”
1.jstack 日志输出到文件将日志输出到 js.log 文件中jstack 1 >js.log12.统计# 线程总数grep “Thread.State” js.log | wc -l# 线程的状态及数量grep “java.lang.Thread.State” js.log | awk ‘{print$2$3$4$5}’|uniq -c
jdk1.8 内存使用状态快速求和方法:
jstat -gc 12| grep -v S0C | awk ‘{s=$3+$4+$6+$8+$10+$12} END {print s}’
堆内存(S0U+S1U+EU+OU)+元数据内存(MU)+已编译class占用内存(CSSU)

