1.查看进程pid
root@crm-prod-68ff6f4b6-79wdq:/# top
top - 15:28:48 up 170 days, 4:38, 0 users, load average: 1.60, 1.15, 1.60
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 8.0 us, 3.4 sy, 0.0 ni, 87.8 id, 0.7 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 32110724 total, 2307952 free, 24300924 used, 5501848 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7535196 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 13.109g 7.608g 18584 S 6.4 24.8 104:08.20 java
78415 root 20 0 20036 3620 2980 S 0.0 0.0 0:00.00 bash
78431 root 20 0 42792 3480 2996 R 0.0 0.0 0:00.00 top
2.查看该pid线程
root@crm-prod-68ff6f4b6-79wdq:/# ps p 1 -L -o pcpu,pmem,pid,tid,time,tname,cmd
%CPU %MEM PID TID TIME TTY CMD
...
0.0 24.8 1 78278 00:00:00 ? java -Xms4000m -Xmx7300m -javaagent:/data/prometheus/jmx_exporter/jmx_prometheus_javaagent-0.15.0.jar=9000:...
3.查看内存使用的堆栈
使用jstack查看
我们挑选了TID=78278的线程进行分析
在分析前需要将78278这个id转换为16进制,方便查找信息
root@crm-prod-68ff6f4b6-79wdq:/# printf "%x\n" 78278
131c6
16进制为4409
将pid为78278的应用打印到日志中
[root@localhost ~]# jstack -l 78278 > jstack.log
4.查看内存堆栈信息
root@crm-prod-68ff6f4b6-79wdq:/# vin jstack.log
找到 131c6