微服务jvm性能分析步骤
一. 查询资源占用高的进程pid查找相应的微服务容器
docker inspect -f "{{.Id}} {{.Name}} {{.State.Pid}}" $(docker ps -q) | grep 20109
二. 配置pid模式为主机
命令行模式 --pid=host
rancher界面配置
三. 以root模式进入容器
docker exec -it -u root 6cf728ad60d7 sh
四. JPS 输出JVM中运行的进程状态信息
五. jstat 查看JVM统计信息
--JIT编译
jstat -compiler 20109
--类装载
jstat -class 20109 1000 10
--垃圾回收
jstat -gc 20109 1000 3
六. jmap 查看进程内存使用情况
- 使用jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
- 使用jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
- 用jmap把进程内存使用情况dump到文件中,再用jhat分析查看
(1) jmap -dump:format=b,file=/tmp/dump.dat 20109
(2) jhat -port 9998 /tmp/dump.dat - 导出内存泄露文件
服务器:jmap -dump:format=b,file=heap.hprof 20109
本地debug: -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
分析工具:MAT
七. 查看死锁或者线程的状态
jstack 20109 > 20109.txt