當前位置:
首頁 > 最新 > 線上解決問題分享:JAVA進程不斷吃內存,一段時間內CPU佔用100%

線上解決問題分享:JAVA進程不斷吃內存,一段時間內CPU佔用100%

1. 問題描述

線上運行的JAVA進程不斷吃內存,一段時間內CPU佔用100% ,服務響應緩慢。

2. 分析過程

通過top命令,發現該tomcat進程佔用CPU100%,通過free -m查看內存使用情況,可用內存加上buffer只剩下四分之一了。首先來分析一下內存使用情況,用jmap工具來查看堆棧(命令:jmap -heap 27688 見頁未詳細信息),沒有發現異常情況。 PS Perm Generation 99.62005615234375% used 這個並不是異常,設置了1G的PS Perm。

然後用jmap工具來查看所有對象佔用的內存情況(jmap -histo:live 27688 見頁未詳細信息),發現字元串佔用了5G的內存([C 表示的就是char,string類型的數據),問題肯定出在這裡了,至於怎樣定位到哪些代碼申請了這麼多的內存,需要定位到具體的線程,然後可以列印線程堆棧來定位到具體的代碼,根據此想法,我們來分析一下各個線程佔用CPU情況。

使用top -Hp 27688能實時查看哪些線程佔用CPU較高,這個命令是把線程佔用CPU的高低排序顯示的。結果我們發現有10多個線程持續佔用CPU較高,把這10多個線程ID取出來,然後用jstack工具列印線程的堆棧信息。注意:jstack工具列印線程ID是16進位的,我們需要把10多個線程ID轉換為16進位的(printf "%x
" 30562,結果是:7762)。列印線程堆棧:jstack 27688 grep 7762 -A60 (見頁未詳細信息),這個命令就會把該線程目前的堆棧信息列印出來。發現對應的代碼有問題:

3. 解決辦法

4. 結論

我們使用了一個有問題的開源包,會不停的申請string 對象,導致內存佔滿,同時這裡也會佔用較高的CPU,這時候GC線程發現沒有內存了,需要不停的做GC,做GC需要佔用較高的CPU,所以我們看到了內存不夠了,CPU佔滿額想像。

5. 命令詳情

jmap -heap 27688

jmap -histo:live 27688

top -Hp 27688

jstack 27688 grep 7762 -A60

http-nio-80-exec-3" daemon prio=10 tid=0x00007f889c1c7000 nid=0x7762 runnable [0x00007f887b1eb000]

本文完。

覺得本文有收穫?請轉發分享給更多人

關注「 物聯網技術交流平台 」,了解更多知識

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 物聯網技術交流平台 的精彩文章:

TAG:物聯網技術交流平台 |

您可能感興趣

更加時尚運動 HUAWEI WATCH 2 2018版體驗分享
分享一些 VAIO S11 2018 款購買建議
「BigBang」「分享」180511 一晃又三年《LOSER》獲得一位GD眼眶濕潤
速寫乾貨分享ARTS·352期
「GFRIEND」「分享」180525 首次單獨演唱會DVD決定發行 不要錯過快來收藏吧!
蘋果分享 macOS 10.13.4 針對 eGPU 的支持文檔
「GFRIEND」「分享」180501 GFRIEND《周偶》預告再公開!周三下午鎖定地下三層
H5教程,給大家分享一個HTML5Plus移動應用
在Iot協議中,只知道WiFi藍牙未免太OUT,一文分享其它10種,值得收藏了解
JANUS電影分享:《Maudie,2016》
Yaman HRF 10T 使用感受分享
彈出年輕 膠你變美 2018 FANCL TENSE UP美容分享會
2018孕遇母親節特輯 | VBAC剖後順:媽媽分享
CVPR 2018 中國論文分享會之「GAN 與合成」
區塊鏈+數據安全項目分享-數據盾陀螺財經VALUE100線下活動第二期
3月20日,JUNNE去了一個分享會 | 2018A/W 上海時裝周新聞發布會
小米MIX2使用一周後的美圖分享
JUSERE·分享|80%新娘都不知道的婚紗內衣搭配攻略,趕緊收藏~
SAT一線考生3500字備考心得分享!
2.2預產期,2.1順產男寶一枚,分享孕期癥狀