成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java服務(wù),內(nèi)存OOM問題如何快速定位?

開發(fā) 開發(fā)工具 后端
OOM的問題,印象中之前寫過,這里再總結(jié)一些相對通用的方案,希望能幫助到Java技術(shù)棧的同學。

最近有朋友在知識星球提問:

沈老師,有一個Java服務(wù)出現(xiàn)了OOM(Out Of Memory)問題,定位了好久不得其法,請問有什么好的思路么?

OOM的問題,印象中之前寫過,這里再總結(jié)一些相對通用的方案,希望能幫助到Java技術(shù)棧的同學。

某Java服務(wù)(假設(shè)PID=10765)出現(xiàn)了OOM,最常見的原因為:

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

畫外音:無非“本身資源不夠”“申請資源太多”“資源耗盡”幾個原因。

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

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

方法:

  1. jmap -heap 10765 

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

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

方法:

  1. jmap -histo:live 10765 | more 

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

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

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

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

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

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

畫外音:線上執(zhí)行該命令會強制執(zhí)行一次fgc。另外還可以dump內(nèi)存進行分析。

三、確認是否是資源耗盡

工具:

  • pstree
  • netstat

查看進程創(chuàng)建的線程數(shù),以及網(wǎng)絡(luò)連接數(shù),如果資源耗盡,也可能出現(xiàn)OOM。 這里介紹另一種方法,通過

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

可以分別查看句柄詳情和線程數(shù)。 例如,某一臺線上服務(wù)器的sshd進程PID是9339,查看

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

如上圖,sshd共占用了四個句柄:

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

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

所以,只要

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

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

希望這1分鐘能幫到這位星球水友。

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

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-07-08 09:50:37

Java內(nèi)存快速定位

2017-08-21 23:50:45

線上內(nèi)存OOM

2023-08-24 22:13:31

2017-08-19 23:21:14

線上CPU定位

2022-02-07 08:55:57

Go程序代碼

2022-06-27 11:20:13

工具內(nèi)存GO

2025-06-11 02:02:00

2020-03-31 17:05:39

Redis熱 key代理

2021-04-14 10:14:34

JVM生產(chǎn)問題定位內(nèi)存泄露

2024-10-10 15:32:51

2019-12-03 08:29:39

代碼調(diào)優(yōu)網(wǎng)絡(luò)

2023-03-20 17:27:54

Cpukafka

2017-08-08 15:05:55

工具定位數(shù)據(jù)庫

2013-04-09 14:49:18

Linux內(nèi)存統(tǒng)計內(nèi)存泄露

2017-07-07 16:30:37

JavaOOM KillerBecome

2019-07-28 18:30:52

MySQL日志數(shù)據(jù)庫

2017-09-10 17:00:42

服務(wù)器數(shù)據(jù)包丟棄

2023-10-10 15:26:30

內(nèi)存泄露OOM

2020-02-27 13:01:57

JVM內(nèi)存劃分

2022-09-09 15:58:29

HiveServerHive 組件Java 開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩a级片 | 在线观看国产 | 久久69精品久久久久久久电影好 | 国产亚洲精品精品国产亚洲综合 | 91精品国产综合久久久久 | 欧美日韩一区二区三区四区 | 国产精品观看 | 中文视频在线 | 在线成人www免费观看视频 | 国产成人精品久久 | 久久高清 | 国产精品久久久久久52avav | www.久| 日韩二三区 | 亚洲国产精品久久久久婷婷老年 | 1000部精品久久久久久久久 | 久久福利电影 | 久久久久久免费免费 | 日本一区二区在线视频 | 久久久久久成人网 | 欧美亚洲综合久久 | 麻豆视频在线免费观看 | 国产精品嫩草影院精东 | 午夜影晥| 国产精品毛片一区二区在线看 | 国产69久久精品成人看动漫 | 久久久成人动漫 | 日韩在线小视频 | 国产99久久久国产精品 | 日韩精品免费 | av影音资源| 久久精品国产免费看久久精品 | 91在线一区| 精品久久久久久国产 | 久久久高清| 日韩欧美中文在线 | 一区二区高清 | 欧美中文字幕一区二区 | 国产成人精品一区二 | 少妇一级淫片免费播放 | 欧美一区二区三区在线免费观看 |