日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
線上服務(wù)內(nèi)存OOM問題定位三板斧

相信大家都有感觸,線上服務(wù)內(nèi)存OOM的問題,是最難定位的問題,不過歸根結(jié)底,最常見的原因:

漳縣網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,漳縣網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為漳縣近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的漳縣做網(wǎng)站的公司定做!

  • 本身資源不夠
  • 申請(qǐng)的太多
  • 資源耗盡

58到家架構(gòu)部,運(yùn)維部,58速運(yùn)技術(shù)部聯(lián)合進(jìn)行了一次線上服務(wù)內(nèi)存OOM問題排查實(shí)戰(zhàn)演練,將內(nèi)存OOM問題定位三板斧分享出來,希望對(duì)大家也有幫助。

題目

某服務(wù)器上部署了Java服務(wù)一枚,出現(xiàn)了OutOfMemoryError,請(qǐng)問有可能是什么原因,問題應(yīng)該如何定位?

不妨設(shè)服務(wù)進(jìn)程PID為10765(沒錯(cuò),就是CPU占用高的那個(gè)倒霉的進(jìn)程《線上服務(wù)CPU100%問題快速定位實(shí)戰(zhàn)》)。

解決思路

Java服務(wù)OOM,最常見的原因?yàn)椋?/p>

  • 有可能是內(nèi)存分配確實(shí)過小,而正常業(yè)務(wù)使用了大量?jī)?nèi)存
  • 某一個(gè)對(duì)象被頻繁申請(qǐng),卻沒有釋放,內(nèi)存不斷泄漏,導(dǎo)致內(nèi)存耗盡
  • 某一個(gè)資源被頻繁申請(qǐng),系統(tǒng)資源耗盡,例如:不斷創(chuàng)建線程,不斷發(fā)起網(wǎng)絡(luò)連接

更具體的,可以使用以下的一些工具逐一排查。

一、確認(rèn)是不是內(nèi)存本身就分配過小

方法:

 
 
 
 
  1. jmap -heap 10765

如上圖,可以查看新生代,老生代堆內(nèi)存的分配大小以及使用情況,看是否本身分配過小。

二、找到最耗內(nèi)存的對(duì)象

方法:

 
 
 
 
  1. jmap -histo:live 10765 | more

圖示:

如上圖,輸入命令后,會(huì)以表格的形式顯示存活對(duì)象的信息,并按照所占內(nèi)存大小排序:

  • 實(shí)例數(shù)
  • 所占內(nèi)存大小
  • 類名

是不是很直觀?對(duì)于實(shí)例數(shù)較多,占用內(nèi)存大小較多的實(shí)例/類,相關(guān)的代碼就要針對(duì)性review了。

上圖中占內(nèi)存最多的對(duì)象是RingBufferLogEvent,共占用內(nèi)存18M,屬于正常使用范圍。

如果發(fā)現(xiàn)某類對(duì)象占用內(nèi)存很大(例如幾個(gè)G),很可能是類對(duì)象創(chuàng)建太多,且一直未釋放。例如:

  • 申請(qǐng)完資源后,未調(diào)用close()或dispose()釋放資源
  • 消費(fèi)者消費(fèi)速度慢(或停止消費(fèi)了),而生產(chǎn)者不斷往隊(duì)列中投遞任務(wù),導(dǎo)致隊(duì)列中任務(wù)累積過多

三、確認(rèn)是否是資源耗盡

工具:

  • pstree
  • netstat

查看進(jìn)程創(chuàng)建的線程數(shù),以及網(wǎng)絡(luò)連接數(shù),如果資源耗盡,也可能出現(xiàn)OOM。

這里介紹另一種方法,通過

 
 
 
 
  • /proc/${PID}/fd
  • /proc/${PID}/task

可以分別查看句柄詳情和線程數(shù)。

例如,某一臺(tái)線上服務(wù)器的sshd進(jìn)程PID是9339,查看

 
 
 
 
  • ll /proc/9339/fd
  • ll /proc/9339/task

如上圖,sshd共占用了四個(gè)句柄

  • 0 -> 標(biāo)準(zhǔn)輸入
  • 1 -> 標(biāo)準(zhǔn)輸出
  • 2 -> 標(biāo)準(zhǔn)錯(cuò)誤輸出
  • 3 -> socket(容易想到是監(jiān)聽端口)

sshd只有一個(gè)主線程PID為9339,并沒有多線程。

所以,只要

 
 
 
 
  • ll /proc/${PID}/fd | wc -l
  • ll /proc/${PID}/task | wc -l (效果等同pstree -p | wc -l)

就能知道進(jìn)程打開的句柄數(shù)和線程數(shù)。

作業(yè)

對(duì)線上服務(wù)器的一臺(tái)tomcat,查看proc下的fd目錄和task目錄,特別是對(duì)于句柄fd目錄的查詢,有意想不到的驚喜喲,一定要?jiǎng)邮衷囋嚬?/p>

【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】


標(biāo)題名稱:線上服務(wù)內(nèi)存OOM問題定位三板斧
標(biāo)題網(wǎng)址:http://www.dlmjj.cn/article/dhjeiei.html