CPU监控:进程和线程
# 观察哪个进程CPU和内存占比高
top
# 观察进程中的线程,哪个线程CPU和内存占比高
top -Hp [pid]
# top 16837
# top -Hp 16837
定位具体java进程
定位具体java进程
jps
jps -l
分析 Thread Dump
在线导出堆栈信息
jstack -l [pid]
jstack -l 16837
查看GC日志
事前方式 JVM启动时增加VM Option参数:
-Xloggc:/path/to/log/dir/gc-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause
在线方式
每500个毫秒打印GC的情况
jstat -gc [pid] 500
jstat -gc 16837 500
获取 Heap Dump
事前方式(建议) JVM启动时增加两个VM Option参数:
#出现 OOME 时生成堆 dump, 生成堆文件地址 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dir/
事后方式 发现程序异常前通过执行指令,直接生成当前JVM的dmp文件, pid为java程序的进程id。
jmap -dump:format=b,file=/path/to/dir/dumpfile [pid]
jmap -dump:format=b,file=serviceDump.dat 16837
注意:jmap 在执行转存储jmap -dump
时,JVM是暂停服务的,所以对线上的运行会产生影响
分析 Heap Dump
在线查找 Heap 有多少对象产生
jmap -histo [pid]
jmap -histo 16837 | head -20
其他方式: arthas
离线分析 Heap Dump
启动 http://localhost:7000/
注意 -J-Xms 之间没有空格
jhat -port 7000 -J-Xmx2048m 文件名
其他方式: jvisualvm
mat
jprofiler
by Sven Augustus https://my.oschina.net/langxSpirit