【jvm内存占用过高分析】
1、首先进入服务容器内
//获取服务容器名称 kubectl get pods |grep <服务名称> // 进入容器内部 kubectl -it exec <上一步获取的服务对应的容器名称> bash
2、使用top命令
top
观察占用CPU或者MEN(内存)使用情况最高的进程,记录PID;
3、使用top -p PID 命令
top -p PID
观察该PID对应进程的占用情况
shift + h
然后使用shift + h 命令------->开启线程显示,观察CPU/Men占用较高的线程有哪些,记录对应TID;
4、将线程对应的堆栈信息导出
jstack PID > jstack.txt
查看该线程的堆栈信息
5、获取对应的线程的TID
printf "%x\n" TID
将线程对应TID转为 16进制数(TID16);
6、从导出的堆栈信息查看该TID对应的信息
cat jstack.txt | grep TID16
查看当前占用内存高的线程具体在做什么操作,分析原因
7、查看存活的对象
jmap -histo:live PID
查看当前堆内存中存在哪些存活对象
8、查看GC的情况
jstat -gcutil PID 1000 3
查看gc情况