中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

JVM堆內(nèi)存使用率持續(xù)上升的一種排查思路

2018-07-02    來源:importnew

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

最近新版本發(fā)布后,在運行一段時間后程序突然無響應(yīng)了,觀察監(jiān)控,發(fā)現(xiàn)JVM堆內(nèi)存占用在某個時間點突然飆升,最終導(dǎo)致應(yīng)用無響應(yīng):

重啟Tomcat后,應(yīng)用恢復(fù)正常,并且后續(xù)時間沒有發(fā)生內(nèi)存上漲問題。

分析這個JVM內(nèi)存曲線,他是直線上升的,以前遇到過類似的場景,會導(dǎo)致這種直線(勻速)上升的,一般是一個死循環(huán)導(dǎo)致的,如果是普通請求資源泄露的話,上升曲線不會這么平穩(wěn),會和請求量有一定的關(guān)系。

死循環(huán)導(dǎo)致這個線程的資源無法釋放,隨著循環(huán)次數(shù)的增多,累積的對象越來越多,最終導(dǎo)致堆內(nèi)存耗盡。

那要如何定位到具體的死循環(huán)位置呢?這個是個難題。之前遇到類似的問題是通過dump生產(chǎn)環(huán)境的JVM內(nèi)存來分析,耗時耗力。結(jié)合之前的經(jīng)驗,這次我直接去nginx日志搜索響應(yīng)碼為504的請求,果不其然,在內(nèi)存飆升時間點附近,有一個被響應(yīng)504的請求。

504是什么響應(yīng)碼呢?這個響應(yīng)碼比較少遇到,指的是網(wǎng)關(guān)超時 (Gateway timeout)。當(dāng)一個請求到Tomcat后,Tomcat如果陷入死循環(huán),那么這個請求自然無法得到響應(yīng),nginx等待響應(yīng)超時,響應(yīng)給用戶504。

504響應(yīng)時間點和內(nèi)存飆升時間點對的上,那么大概率就是這個接口導(dǎo)致的,詳細分析這個接口的代碼,發(fā)現(xiàn)了在特殊參數(shù)的情況下,會進入死循環(huán),修改后問題解決。

總結(jié):

  1. 觀察JVM內(nèi)存曲線,是否是勻速上升
  2. 搜索Nginx響應(yīng)碼為504的日志,查看日志時間是否和內(nèi)存上升時間點匹配
  3. 分析Nginx響應(yīng)碼為504的請求,確認(rèn)是否存在死循環(huán)邏輯

標(biāo)簽: 代碼 搜索

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Git 內(nèi)部原理之 Git 對象

下一篇:ERROR 3009 (HY000) : Column count of mysql.user is wrong