人妻少妇乱子伦精品_日韩人妻潮喷视频网站_日本最新最全无码不卡免费_日韩AV无码中文

當(dāng)前位置: 首頁 > 科技新聞 >

將Java進(jìn)程轉(zhuǎn)移到“解剖臺(tái)”之前,法醫(yī)都干了什

時(shí)間:2019-11-12 19:32來源:網(wǎng)絡(luò)整理 瀏覽:
作為法醫(yī),不怕高度腐爛的尸體,也不怕錯(cuò)綜復(fù)雜的案情。最怕的,是沒留下任何東西??諢o一物,任何高超的技術(shù),豐富的經(jīng)驗(yàn),都無從下手。 生產(chǎn)環(huán)境

作為法醫(yī),不怕高度腐爛的尸體,也不怕錯(cuò)綜復(fù)雜的案情。最怕的,是沒留下任何東西??諢o一物,任何高超的技術(shù),豐富的經(jīng)驗(yàn),都無從下手。

將Java進(jìn)程轉(zhuǎn)移到“解剖臺(tái)”之前,法醫(yī)都干了什么?

生產(chǎn)環(huán)境錯(cuò)綜復(fù)雜,幾分鐘前活蹦亂跳的進(jìn)程,此刻就奄奄一息的躺在那里,茍延殘喘。作為第一時(shí)間發(fā)現(xiàn)的目擊者,一定要注意保存好現(xiàn)場(chǎng)。有時(shí),最壞的情況就是引火上身,糾纏不清,這都是我們不愿看到的。

在進(jìn)程的生命煙消云散之前,我們還有很多事要做。本篇文章,將介紹常用的保留線索方法。最后,將這個(gè)過程,使用Shell腳本自動(dòng)化。

將Java進(jìn)程轉(zhuǎn)移到“解剖臺(tái)”之前,法醫(yī)都干了什么?

系統(tǒng)環(huán)境,不說謊的案發(fā)現(xiàn)場(chǎng)

1、系統(tǒng)當(dāng)前網(wǎng)絡(luò)連接

 

本命令將系統(tǒng)的所有網(wǎng)絡(luò)連接輸出到ss.dump文件中。使用ss命令而不是netstat的原因,是因?yàn)閚etstat在網(wǎng)絡(luò)連接非常多的情況下,執(zhí)行非常緩慢。

后續(xù)的處理,通過查看各種網(wǎng)絡(luò)連接狀態(tài)的梳理,來排查TIME_WAIT或者CLOSE_WAIT,或者其他連接過高的問題,非常有用。

2、網(wǎng)絡(luò)狀態(tài)統(tǒng)計(jì)

 

將網(wǎng)絡(luò)統(tǒng)計(jì)狀態(tài),輸出到netstat-s.dump文件中。它能夠按照各個(gè)協(xié)議進(jìn)行統(tǒng)計(jì)輸出,對(duì)把握當(dāng)時(shí)整個(gè)網(wǎng)絡(luò)狀態(tài),有非常大的作用。

 

上面這個(gè)命令,會(huì)使用sar輸出當(dāng)前的網(wǎng)絡(luò)流量。在一些速度非常高的模塊上,比如redis、kafka,就經(jīng)常發(fā)生跑滿網(wǎng)卡的情況。

3、進(jìn)程資源

 

這是個(gè)非常強(qiáng)大的命令。可以查看進(jìn)程打開了哪些文件,這是一個(gè)神器,可以以進(jìn)程的維度查看整個(gè)資源的使用情況。這個(gè)命令在資源非常多的情況下,輸出稍慢,耐心等待。

4、CPU資源

 

這幾個(gè)命令,我們?cè)?/p>

《Linux之《荒島余生》(二)CPU篇》

這篇文章,已經(jīng)有了比較詳細(xì)的介紹。主要輸出當(dāng)前系統(tǒng)的CPU和負(fù)載,便于事后排查。

這幾個(gè)命令的功能,有不少重合,使用者要注意甄別。

5、I/O資源

 

一般,以計(jì)算為主的服務(wù)節(jié)點(diǎn),I/O資源會(huì)比較正常。但有時(shí)候也是會(huì)發(fā)生問題的,比如日志輸出過多,或者磁盤問題等。此命令可以輸出每塊磁盤的基本性能信息,用來排查I/O問題。

6、內(nèi)存問題

 

內(nèi)存問題較為復(fù)雜,有興趣可以看下xjjdog堆外內(nèi)存排查小結(jié)這篇文章。一般發(fā)生的問題是JVM內(nèi)存溢出,我們?cè)谶M(jìn)程小節(jié)說明。

free命令能夠大體展現(xiàn)操作系統(tǒng)的內(nèi)存概況,是故障排查中一個(gè)非常重要的點(diǎn)。

7、其他全局

 

在xjjdog的其他文章,我們不止一次說到dmesg。dmesg是許多靜悄悄死掉的服務(wù)留下的最后一點(diǎn)線索。

當(dāng)然,ps作為執(zhí)行頻率最高的一個(gè)命令,它當(dāng)時(shí)的輸出信息,也必然有一些可以參考的價(jià)值。

由于內(nèi)核的配置參數(shù),會(huì)對(duì)系統(tǒng)產(chǎn)生非常大的影響。所以我們也輸出了一份。

進(jìn)程快照,最后的遺言

1、jinfo

 

此命令將輸出java的基本進(jìn)程信息。包括環(huán)境變量和參數(shù)配置。

2、gc信息

 

jstat將輸出當(dāng)前的gc信息。一般,能大體看出一個(gè)端倪,如果不能,將借助jmap進(jìn)行分析。

3、堆信息

 

jmap將會(huì)得到當(dāng)前java進(jìn)程的dump信息。如上所示,其實(shí)最有用的就是第4個(gè)命令,但是前面三個(gè)能夠讓你初步對(duì)系統(tǒng)概況進(jìn)行大體判斷。

因?yàn)椋?個(gè)命令產(chǎn)生的文件,一般都非常的大。而且,需要下載下來,導(dǎo)入MAT這樣的工具進(jìn)行深入分析,才能獲取結(jié)果。

4、執(zhí)行棧

 

jstack將會(huì)獲取當(dāng)時(shí)的執(zhí)行棧。一般都會(huì)多次取值,我們這里取一次即可。這些信息非常有用,能夠還原你的java進(jìn)程中線程情況。

 

為了能夠得到更加精細(xì)的信息,我們使用top命令,來獲取進(jìn)程中所有線程的cpu信息。這樣,就可以看到資源到底是耗費(fèi)在什么地方。

5、高級(jí)替補(bǔ)

 

有時(shí)候,jstack并不能夠運(yùn)行。有很多原因,比如java進(jìn)程幾乎不響應(yīng)了。我們會(huì)嘗試向進(jìn)程發(fā)送kill -3信號(hào)。這個(gè)信號(hào)是java進(jìn)程享有的,將會(huì)打印jstack的trace信息到日志文件中。是jstack的一個(gè)替補(bǔ)方案。

 

對(duì)于jmap無法執(zhí)行的問題,也有替補(bǔ),那就是GDB組件中的gcore。將會(huì)生成一個(gè)core文件。我們可以使用如下的命令去生成dump

 

瞬時(shí)態(tài)和歷史態(tài)

xjjdog這里創(chuàng)建兩個(gè)名詞。瞬時(shí)態(tài)是指當(dāng)時(shí)發(fā)生的,快照類型的元素;歷史態(tài)是指按照頻率抓取的,有固定監(jiān)控項(xiàng)的資源變動(dòng)圖。

上面有很多信息,比如CPU,比如系統(tǒng)內(nèi)存等,瞬時(shí)態(tài)的價(jià)值就不如歷史態(tài)來的直觀一些,因?yàn)樗€存在一個(gè)基線問題。所以如果有監(jiān)控系統(tǒng)一類的工具,將美好的多。

但對(duì)于lsof,heap等,這種沒有時(shí)間序列概念的混雜信息,無法進(jìn)入監(jiān)控系統(tǒng),產(chǎn)生有用價(jià)值,就只能夠通過瞬時(shí)態(tài)進(jìn)行分析。這種情況下,瞬時(shí)態(tài)的價(jià)值反而更大一些。

我已經(jīng)把上面的過程,寫成了一個(gè)shell腳本。你可以在github上找到它。點(diǎn)擊左下角的查看原文,也能和它見面。

https://github.com/sayhiai/shell

但值得注意的是,分布式環(huán)境的故障原因,往往會(huì)出乎意料,你的這份單機(jī)證據(jù),可能就只是一個(gè)表象。它沒有說謊,但它背后的意義,往往對(duì)問題本質(zhì)進(jìn)行了錯(cuò)誤的引導(dǎo)。

【責(zé)任編輯:武曉燕 TEL:(010)68476606】
推薦內(nèi)容