自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[273027]]

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

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

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

 

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

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

  1. ss -antp > $DUMP_DIR/ss.dump 2>&1 

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

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

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

  1. netstat -s > $DUMP_DIR/netstat-s.dump 2>&1 

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

  1. sar -n DEV 1 2 > $DUMP_DIR/sar-traffic.dump 2>&1 

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

3、進程資源

  1. lsof -p $PID > $DUMP_DIR/lsof-$PID.dump 

這是個非常強大的命令??梢圆榭催M程打開了哪些文件,這是一個神器,可以以進程的維度查看整個資源的使用情況。這個命令在資源非常多的情況下,輸出稍慢,耐心等待。

4、CPU資源

  1. mpstat > $DUMP_DIR/mpstat.dump 2>&1 
  2. vmstat 1 3 > $DUMP_DIR/vmstat.dump 2>&1 
  3. sar -p ALL  > $DUMP_DIR/sar-cpu.dump  2>&1 
  4. uptime > $DUMP_DIR/uptime.dump 2>&1 

這幾個命令,我們在《Linux之《荒島余生》(二)CPU篇》這篇文章,已經(jīng)有了比較詳細的介紹。主要輸出當前系統(tǒng)的CPU和負載,便于事后排查。

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

5、I/O資源

  1. iostat -x > $DUMP_DIR/iostat.dump 2>&1 

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

6、內(nèi)存問題

  1. free -h > $DUMP_DIR/free.dump 2>&1 

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

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

7、其他全局

  1.  ps -ef > $DUMP_DIR/ps.dump 2>&1 
  2. dmesg > $DUMP_DIR/dmesg.dump 2>&1 
  3. sysctl -a > $DUMP_DIR/sysctl.dump 2>&1 

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

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

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

進程快照,最后的遺言

1、jinfo

  1. ${JDK_BIN}jinfo $PID > $DUMP_DIR/jinfo.dump 2>&1 

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

2、gc信息

  1. ${JDK_BIN}jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil.dump 2>&1 
  2. ${JDK_BIN}jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity.dump 2>&1 

jstat將輸出當前的gc信息。一般,能大體看出一個端倪,如果不能,將借助jmap進行分析。

3、堆信息

  1. ${JDK_BIN}jmap $PID > $DUMP_DIR/jmap.dump 2>&1 
  2. ${JDK_BIN}jmap -heap $PID > $DUMP_DIR/jmap-heap.dump 2>&1 
  3. ${JDK_BIN}jmap -histo $PID > $DUMP_DIR/jmap-histo.dump 2>&1 
  4. ${JDK_BIN}jmap -dump:format=b,file=$DUMP_DIR/heap.bin $PID > /dev/null  2>&1 

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

因為,第4個命令產(chǎn)生的文件,一般都非常的大。而且,需要下載下來,導入MAT這樣的工具進行深入分析,才能獲取結(jié)果。

4、執(zhí)行棧

  1. ${JDK_BIN}jstack $PID > $DUMP_DIR/jstack.dump 2>&1 

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

  1. top -Hp $PID -b -n 1 -c >  $DUMP_DIR/top-$PID.dump 2>&1 

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

5、高級替補

  1. kill -3 $PID 

有時候,jstack并不能夠運行。有很多原因,比如java進程幾乎不響應了。我們會嘗試向進程發(fā)送kill -3信號。這個信號是java進程享有的,將會打印jstack的trace信息到日志文件中。是jstack的一個替補方案。

  1. gcore -o $DUMP_DIR/core $PID 

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

  1. ${JDK_BIN}jhsdb jmap --exe ${JDK}java  --core $DUMP_DIR/core --binaryheap 

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

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

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

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

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

https://github.com/sayhiai/shell

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

責任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2019-10-11 11:14:26

Java進程環(huán)境

2013-02-22 09:34:53

紅帽Hadoop開源

2013-06-09 10:18:49

遷移云計算風險評估

2019-02-25 18:54:14

ERP云端遷移

2020-06-18 10:12:42

云計算云安全數(shù)據(jù)

2010-04-19 10:50:01

Oracle轉(zhuǎn)移

2019-07-02 13:52:04

云計算數(shù)據(jù)中心IT

2012-08-11 21:43:11

2011-01-19 09:25:40

互聯(lián)網(wǎng)

2021-03-04 08:13:53

蘋果iCloud谷歌相冊

2021-04-25 14:54:53

數(shù)據(jù)庫安全系統(tǒng)

2012-11-01 16:11:31

2011-06-17 11:00:05

2019-04-03 11:25:59

Windows 10HDDSSD

2020-05-09 10:50:10

聯(lián)絡中心遠程工作通信網(wǎng)絡

2010-06-25 09:26:29

NetBeansNetBeans 6.

2020-01-06 10:51:24

云計算IT混合云

2010-08-26 22:05:05

2014-09-29 10:41:07

MDMMIM企業(yè)移動安全

2013-03-07 10:06:49

Office 2013
點贊
收藏

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