JAVA 線上故障排查思路饿这,從 CPU浊伙、磁盤、內(nèi)存长捧、網(wǎng)絡(luò)到GC

服務(wù)器問題排查步驟


線上故障主要會(huì)包括cpu嚣鄙、磁盤、內(nèi)存以及網(wǎng)絡(luò)問題串结,而大多數(shù)故障可能會(huì)包含不止一個(gè)層面的問題哑子,所以進(jìn)行排查時(shí)候盡量四個(gè)方面依次排查一遍。同時(shí)例如jstack肌割、jmap等工具也是不被局限在一個(gè)方面的問題的卧蜓,基本上出問題就是df、free把敞、top 三連弥奸,然后依次jstack、jmap伺候奋早,具體問題具體分析即可盛霎。

一 、cpu使用情況

  1. top查看總體的系統(tǒng)硬件使用情況
    [root@VM_132_3_centos temp]# top
    1伸蚯、load average 查看一分鐘 十分鐘 半個(gè)小時(shí)內(nèi)的平均負(fù)載狀態(tài)
    2摩渺、多次按鍵盤1 可查看每個(gè)CPU內(nèi)核的使用情況
    3、各個(gè)進(jìn)程的內(nèi)存和CPU使用情況

ps -mp PID -o THREAD,tid,time 查看這個(gè)進(jìn)程的具體線程的使用cpu情況

  • m 顯示所有的線程
  • p pid 進(jìn)程使用cpu的時(shí)間
  • 0 該參數(shù)后是用戶自定義格式
[root@VM_132_3_centos nginx]# ps -mp 14669 -o THREAD,tid,time
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
root      0.2   -    - -         -      -     - 03:11:33
root      0.0  19    - futex_    -      - 14669 00:00:00

當(dāng)然也可以用 top -H -p pid來找到cpu使用率比較高的一些線程

[root@VM_132_3_centos nginx]# top -H -p 14669

printf ‘%x\n’ pid 然后將占用最高的pid轉(zhuǎn)換為16進(jìn)制得到nid

[root@VM_132_3_centos nginx]# printf "%x\n" 14818

接著直接在jstack中找到相應(yīng)的堆棧信息jstack pid |grep ‘nid’ -A50剂邮,找到自己寫的代碼行數(shù)摇幻,就定位到了出問題的代碼位置


參數(shù)說明

  • pid 進(jìn)程id
  • nid 線程id 小寫的16進(jìn)制編號(hào)
  • A50 查看匹配到行后的50行 或者用C20查看前后20行
    [root@VM_132_3_centos nginx]# jstack 14669 |grep 39e2

2. vmstat 查看cpu

一般vmstat工具的使用是通過兩個(gè)數(shù)字參數(shù)來完成的,第一個(gè)參數(shù)是采樣的時(shí)間間隔數(shù)單位是秒挥萌,第二個(gè)參數(shù)是采樣的次數(shù)

[root@VM_132_3_centos temp]# vmstat -n 2 3


參數(shù)解釋
[1]. procs
– r: 運(yùn)行和等待CPU時(shí)間片的進(jìn)程數(shù)绰姻,原則上1核的CPU的運(yùn)行隊(duì)列不要超過2,整個(gè)系統(tǒng)的運(yùn)行隊(duì)列不能超過總核數(shù)的2倍引瀑,
否則代表系統(tǒng)壓力過大
– b: 等待資源的進(jìn)程數(shù)狂芋,比如正在等待磁盤I/0、網(wǎng)絡(luò)I/0等憨栽。
[2]. cpu
– us: 用戶進(jìn)程消耗CPU時(shí)間百分比帜矾,us值高,用戶進(jìn)程消耗CPU時(shí)間多屑柔,如果長期大于50%屡萤,優(yōu)化程序;
– sy:內(nèi)核進(jìn)程消耗的CPU時(shí)間百分比掸宛;
– us + sy:參考值為80%死陆,如果us + sy大于80%,說明可能存在CPU不足唧瘾;
– id:處于空閑的CPU百分比.措译;
– wa:系統(tǒng)等待IO的CPU時(shí)間百分比别凤;
– st:來自于一個(gè)虛擬機(jī)偷取的CPU時(shí)間的百分比。
-[3]. system
– cs(context switch):一列則代表了上下文切換的次數(shù)

3. jstat分析頻繁gc

當(dāng)然我們還是會(huì)使用jstack來分析問題领虹,但有時(shí)候我們可以先確定下gc是不是太頻繁规哪,使用jstat -gc pid 1000命令來對(duì)gc分代變化情況進(jìn)行觀察,1000表示采樣間隔(ms)掠械,S0C/S1C由缆、S0U/S1U注祖、EC/EU猾蒂、OC/OU、MC/MU分別代表兩個(gè)Survivor區(qū)是晨、Eden區(qū)肚菠、老年代、元數(shù)據(jù)區(qū)的容量和使用量罩缴。YGC/YGT蚊逢、FGC/FGCT、GCT則代表YoungGc箫章、FullGc的耗時(shí)和次數(shù)以及總耗時(shí)烙荷。如果看到gc比較頻繁,再針對(duì)gc方面做進(jìn)一步分析檬寂。


二终抽、 內(nèi)存使用情況

1. free 查看內(nèi)存使用情況

[root@VM_132_3_centos nginx]# free -m

2 .使用JMAP定位代碼內(nèi)存泄漏

上述關(guān)于OOM和StackOverflow的代碼排查方面,我們一般使用JMAPjmap -dump:format=b,file=filename pid來導(dǎo)出dump文件



通過mat(Eclipse Memory Analysis Tools)導(dǎo)入dump文件進(jìn)行分析桶至,內(nèi)存泄漏問題一般我們直接選Leak Suspects即可昼伴,mat給出了內(nèi)存泄漏的建議。另外也可以選擇Top Consumers來查看最大對(duì)象報(bào)告镣屹。和線程相關(guān)的問題可以選擇thread overview進(jìn)行分析圃郊。除此之外就是選擇Histogram類概覽來自己慢慢分析,大家可以搜搜mat的相關(guān)教程女蜈。



日常開發(fā)中持舆,代碼產(chǎn)生內(nèi)存泄漏是比較常見的事,并且比較隱蔽伪窖,需要開發(fā)者更加關(guān)注細(xì)節(jié)逸寓。比如說每次請(qǐng)求都new對(duì)象,導(dǎo)致大量重復(fù)創(chuàng)建對(duì)象惰许;進(jìn)行文件流操作但未正確關(guān)閉席覆;手動(dòng)不當(dāng)觸發(fā)gc;ByteBuffer緩存分配不合理等都會(huì)造成代碼OOM汹买。

三佩伤、 硬盤空間使用情況

1. df -lh 查看磁盤的使用情況

[root@VM_132_3_centos temp]# df -lh

2. du -h --max-depth=1 查看當(dāng)前目錄中文件和文件夾的大小

[root@VM_132_3_centos nginx]# du -h --max-depth=1

3.iostat 查看磁盤io情況

最后一列%util可以看到每塊磁盤寫入的程度聊倔,而rrqpm/s以及wrqm/s分別表示讀寫速度,一般就能幫助定位到具體哪塊磁盤出現(xiàn)問題了生巡。



磁盤塊設(shè)備分布

  • rkB/s每秒讀取數(shù)據(jù)量kB;
  • wkB/s每秒寫入數(shù)據(jù)量kB;
  • svctm I/O請(qǐng)求的平均服務(wù)時(shí)間耙蔑,單位毫秒;
  • await I/O請(qǐng)求的平均等待時(shí)間,單位毫秒;值越小孤荣,性能越好;
  • util一秒中有百分幾的時(shí)間用于I/O操作甸陌。接近100%時(shí),表示磁盤帶寬跑滿盐股,需要優(yōu)化程序或者增加磁盤;

4. lsof -p pid查看文件讀取情況

輸出各列信息的意義如下:

COMMAND: 進(jìn)程的名稱
PID: 進(jìn)程標(biāo)識(shí)符
USER: 進(jìn)程所有者
FD: 文件描述符钱豁,應(yīng)用程序通過文件描述符識(shí)別該文件。每個(gè)進(jìn)程都有自己的文件描述符表疯汁,因此FD可能會(huì)重名
TYPE: 文件類型
DEVICE: 指定磁盤的名稱
SIZE: 文件的大小
NODE: 索引節(jié)點(diǎn)(文件在磁盤上的標(biāo)識(shí))
NAME: 打開文件的確切名稱


四牲尺、網(wǎng)絡(luò)使用情況

1. netstat 查看tcp等連接情況

tcp隊(duì)列溢出
netstat命令,執(zhí)行netstat -s | egrep “l(fā)isten|LISTEN”



如上圖所示幌蚊,overflowed表示全連接隊(duì)列溢出的次數(shù)谤碳,sockets dropped表示半連接隊(duì)列溢出的次數(shù)。
查看各狀態(tài)的連接數(shù)量 netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

[root@VM_132_3_centos nginx]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}

2. telnet查看端口是否連通

出現(xiàn)下面這個(gè)connected就是說明端口是通的

[root@VM_132_3_centos nginx]# telnet www.baidu.com 80

3. ifstat 查看網(wǎng)絡(luò)io情況

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溢豆,一起剝皮案震驚了整個(gè)濱河市蜒简,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漩仙,老刑警劉巖搓茬,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舅锄,死亡現(xiàn)場離奇詭異挠蛉,居然都是意外死亡例驹,警方通過查閱死者的電腦和手機(jī)倒源,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門允耿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來化戳,“玉大人泻云,你說我怎么就攤上這事固额】牧拢” “怎么了私爷?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膊夹。 經(jīng)常有香客問我衬浑,道長,這世上最難降的妖魔是什么放刨? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任工秩,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘助币。我一直安慰自己浪听,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布眉菱。 她就那樣靜靜地躺著迹栓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俭缓。 梳的紋絲不亂的頭發(fā)上克伊,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音华坦,去河邊找鬼愿吹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛季春,可吹牛的內(nèi)容都是我干的洗搂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼载弄,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了撵颊?” 一聲冷哼從身側(cè)響起宇攻,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倡勇,沒想到半個(gè)月后逞刷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妻熊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年夸浅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扔役。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帆喇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亿胸,到底是詐尸還是另有隱情坯钦,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布侈玄,位于F島的核電站婉刀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏序仙。R本人自食惡果不足惜突颊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧律秃,春花似錦呈昔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迁客,卻和暖如春郭宝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掷漱。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工粘室, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卜范。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓衔统,卻偏偏與公主長得像,于是被迫代替她去往敵國和親海雪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锦爵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容