1、top 查看具體是哪個進程吃內存較多,接下來我們以排查第一個為例
2、定位線程問題(通過命令查看9534進程的線程情況),命令:ps p 9534 -L -o pcpu,pmem,pid,tid,time,tname,cmd
由此可以看到這PID:9534的進程產生了很多線程。接下來就可以通過jstack查看內存使用的堆棧。,具體可以執行 ps p 9534 -L -o pcpu,pmem,pid,tid,time,tname,cmd |wc -l 來查具體有多少線程
3、查看內存使用的堆棧:在這里我們挑選了TID=25830的線程進行分析,首先需要將25830這個id轉換為16進制。需輸入如下命令
執行命令 printf "%x\n" 25830
4、將PID為9534的堆棧信息打印到jstack.log中,命令:jstack -l 9534 > /home/zheren/jstack.log
5、查看日志,好多waiting的,具體需要開發查看代碼,為何這么多線程等待