java進程占用系統內存高,排查方法


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的,具體需要開發查看代碼,為何這么多線程等待


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM