您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Java進(jìn)程轉(zhuǎn)移前會發(fā)生什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java進(jìn)程轉(zhuǎn)移前會發(fā)生什么”吧!
1、系統(tǒng)當(dāng)前網(wǎng)絡(luò)連接
ss -antp > $DUMP_DIR/ss.dump 2>&1
本命令將系統(tǒng)的所有網(wǎng)絡(luò)連接輸出到ss.dump文件中。使用ss命令而不是netstat的原因,是因為netstat在網(wǎng)絡(luò)連接非常多的情況下,執(zhí)行非常緩慢。
后續(xù)的處理,通過查看各種網(wǎng)絡(luò)連接狀態(tài)的梳理,來排查TIME_WAIT或者CLOSE_WAIT,或者其他連接過高的問題,非常有用。
2、網(wǎng)絡(luò)狀態(tài)統(tǒng)計
netstat -s > $DUMP_DIR/netstat-s.dump 2>&1
將網(wǎng)絡(luò)統(tǒng)計狀態(tài),輸出到netstat-s.dump文件中。它能夠按照各個協(xié)議進(jìn)行統(tǒng)計輸出,對把握當(dāng)時整個網(wǎng)絡(luò)狀態(tài),有非常大的作用。
sar -n DEV 1 2 > $DUMP_DIR/sar-traffic.dump 2>&1
上面這個命令,會使用sar輸出當(dāng)前的網(wǎng)絡(luò)流量。在一些速度非常高的模塊上,比如redis、kafka,就經(jīng)常發(fā)生跑滿網(wǎng)卡的情況。
3、進(jìn)程資源
lsof -p $PID > $DUMP_DIR/lsof-$PID.dump
這是個非常強(qiáng)大的命令??梢圆榭催M(jìn)程打開了哪些文件,這是一個神器,可以以進(jìn)程的維度查看整個資源的使用情況。這個命令在資源非常多的情況下,輸出稍慢,耐心等待。
4、CPU資源
mpstat > $DUMP_DIR/mpstat.dump 2>&1 vmstat 1 3 > $DUMP_DIR/vmstat.dump 2>&1 sar -p ALL > $DUMP_DIR/sar-cpu.dump 2>&1 uptime > $DUMP_DIR/uptime.dump 2>&1
這幾個命令,我們在
《Linux之《荒島余生》(二)CPU篇》
這篇文章,已經(jīng)有了比較詳細(xì)的介紹。主要輸出當(dāng)前系統(tǒng)的CPU和負(fù)載,便于事后排查。
這幾個命令的功能,有不少重合,使用者要注意甄別。
5、I/O資源
iostat -x > $DUMP_DIR/iostat.dump 2>&1
一般,以計算為主的服務(wù)節(jié)點,I/O資源會比較正常。但有時候也是會發(fā)生問題的,比如日志輸出過多,或者磁盤問題等。此命令可以輸出每塊磁盤的基本性能信息,用來排查I/O問題。
6、內(nèi)存問題
free -h > $DUMP_DIR/free.dump 2>&1
內(nèi)存問題較為復(fù)雜,有興趣可以看下xjjdog堆外內(nèi)存排查小結(jié)這篇文章。一般發(fā)生的問題是JVM內(nèi)存溢出,我們在進(jìn)程小節(jié)說明。
free命令能夠大體展現(xiàn)操作系統(tǒng)的內(nèi)存概況,是故障排查中一個非常重要的點。
7、其他全局
ps -ef > $DUMP_DIR/ps.dump 2>&1 dmesg > $DUMP_DIR/dmesg.dump 2>&1 sysctl -a > $DUMP_DIR/sysctl.dump 2>&1
在xjjdog的其他文章,我們不止一次說到dmesg。dmesg是許多靜悄悄死掉的服務(wù)留下的最后一點線索。
當(dāng)然,ps作為執(zhí)行頻率最高的一個命令,它當(dāng)時的輸出信息,也必然有一些可以參考的價值。
由于內(nèi)核的配置參數(shù),會對系統(tǒng)產(chǎn)生非常大的影響。所以我們也輸出了一份。
進(jìn)程快照,最后的遺言
1、jinfo
${JDK_BIN}jinfo $PID > $DUMP_DIR/jinfo.dump 2>&1
此命令將輸出java的基本進(jìn)程信息。包括環(huán)境變量和參數(shù)配置。
2、gc信息
${JDK_BIN}jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil.dump 2>&1 ${JDK_BIN}jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity.dump 2>&1
jstat將輸出當(dāng)前的gc信息。一般,能大體看出一個端倪,如果不能,將借助jmap進(jìn)行分析。
3、堆信息
${JDK_BIN}jmap $PID > $DUMP_DIR/jmap.dump 2>&1 ${JDK_BIN}jmap -heap $PID > $DUMP_DIR/jmap-heap.dump 2>&1 ${JDK_BIN}jmap -histo $PID > $DUMP_DIR/jmap-histo.dump 2>&1 ${JDK_BIN}jmap -dump:format=b,file=$DUMP_DIR/heap.bin $PID > /dev/null 2>&1
jmap將會得到當(dāng)前java進(jìn)程的dump信息。如上所示,其實最有用的就是第4個命令,但是前面三個能夠讓你初步對系統(tǒng)概況進(jìn)行大體判斷。
因為,第4個命令產(chǎn)生的文件,一般都非常的大。而且,需要下載下來,導(dǎo)入MAT這樣的工具進(jìn)行深入分析,才能獲取結(jié)果。
4、執(zhí)行棧
${JDK_BIN}jstack $PID > $DUMP_DIR/jstack.dump 2>&1
jstack將會獲取當(dāng)時的執(zhí)行棧。一般都會多次取值,我們這里取一次即可。這些信息非常有用,能夠還原你的java進(jìn)程中線程情況。
top -Hp $PID -b -n 1 -c > $DUMP_DIR/top-$PID.dump 2>&1
為了能夠得到更加精細(xì)的信息,我們使用top命令,來獲取進(jìn)程中所有線程的cpu信息。這樣,就可以看到資源到底是耗費(fèi)在什么地方。
5、高級替補(bǔ)
kill -3 $PID
有時候,jstack并不能夠運(yùn)行。有很多原因,比如java進(jìn)程幾乎不響應(yīng)了。我們會嘗試向進(jìn)程發(fā)送kill -3信號。這個信號是java進(jìn)程享有的,將會打印jstack的trace信息到日志文件中。是jstack的一個替補(bǔ)方案。
gcore -o $DUMP_DIR/core $PID
對于jmap無法執(zhí)行的問題,也有替補(bǔ),那就是GDB組件中的gcore。將會生成一個core文件。我們可以使用如下的命令去生成dump
${JDK_BIN}jhsdb jmap --exe ${JDK}java --core $DUMP_DIR/core --binaryheap
瞬時態(tài)和歷史態(tài)
xjjdog這里創(chuàng)建兩個名詞。瞬時態(tài)是指當(dāng)時發(fā)生的,快照類型的元素;歷史態(tài)是指按照頻率抓取的,有固定監(jiān)控項的資源變動圖。
上面有很多信息,比如CPU,比如系統(tǒng)內(nèi)存等,瞬時態(tài)的價值就不如歷史態(tài)來的直觀一些,因為它還存在一個基線問題。所以如果有監(jiān)控系統(tǒng)一類的工具,將美好的多。
但對于lsof,heap等,這種沒有時間序列概念的混雜信息,無法進(jìn)入監(jiān)控系統(tǒng),產(chǎn)生有用價值,就只能夠通過瞬時態(tài)進(jìn)行分析。這種情況下,瞬時態(tài)的價值反而更大一些。
到此,相信大家對“Java進(jìn)程轉(zhuǎn)移前會發(fā)生什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。