【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情况

本文详细阐述了如何通过kubectl、jstack和jmap等工具分析服务容器内JVM内存问题,包括定位高占用进程、线程、堆栈和对象,以及检查GC情况,助你有效解决内存溢出问题。



8227

被折叠的 条评论
为什么被折叠?



