生產(chǎn)故障如何排查

? ? 作為一個開發(fā)人員,如果你不知道debug那就太low了,在開發(fā)過程中我們經(jīng)常會使用到到一個技能,如果你能很好的使用這個技能,會讓你少掉幾根頭發(fā)(延緩幾年變成禿子^_^),debug是一把好劍,在初期的時候,如果你可以把它用的很6,那你在工作中就可以如魚得水,走的比較順,但是,我們不能過度的依賴debug,我們應(yīng)該在使用debug的過程中學(xué)會的分析軟件產(chǎn)生問題的地方,是什么原因?qū)е铝诉@個問題,這才是終極目標(biāo),做到手中無劍,心中有劍的最高境界,就像劉欣老師在他的一篇文章《不加斷點調(diào)試的程序員是好程序員》一樣:http://user.qzone.qq.com/14703250/2。

在開發(fā)階段IDE提供了debug這個神器,能讓我們定位問題變得更加容易,但是在真正的生產(chǎn)環(huán)境還是會發(fā)生許多我們無法預(yù)知的故障,你不可能在生產(chǎn)環(huán)境上 去裝一個eclipse去debug吧,好吧,我們還有秘密武器,可以查看日志記錄,可是如果某些故障發(fā)生在我們沒有記錄的地方呢,哈哈,傻眼了吧。

下面記錄了前輩就一個實際的生產(chǎn)故障進(jìn)行問題的分析定位的過程:

問題:高CPU占用

根據(jù)top命令,發(fā)現(xiàn)PID為28555的Java進(jìn)程占用CPU高達(dá)200%,出現(xiàn)故障,圖例如下:


通過ps aux | grep PID命令,可以進(jìn)一步確定是tomcat進(jìn)程出現(xiàn)了問題。但是,接下來怎么定位到具體線程或者代碼呢?


然后將需要的線程ID轉(zhuǎn)換為16進(jìn)制格式:printf "%x\n" tid

最后通過?java 自帶的故障分析工具 jstack 抓取線程快照:jstack pid|grep tid -A 30,找到有問題的JAVA代碼,進(jìn)行業(yè)務(wù)調(diào)整和編碼修改

總結(jié)排查CPU故障的方法和技巧 :

1、top命令:Linux命令??梢圆榭磳崟r的CPU使用情況。也可以查看最近一段時間的CPU使用情況。

2、PS命令:Linux命令。強大的進(jìn)程狀態(tài)監(jiān)控命令。可以查看進(jìn)程以及進(jìn)程中線程的當(dāng)前CPU使用情況。屬于當(dāng)前狀態(tài)的采樣數(shù)據(jù)。

3、jstack:Java提供的命令??梢圆榭茨硞€進(jìn)程的當(dāng)前線程棧運行情況。根據(jù)這個命令的輸出可以定位某個進(jìn)程的所有線程的當(dāng)前運行狀態(tài)、運行代碼,以及是否死鎖等等。

4、pstack:Linux命令??梢圆榭茨硞€進(jìn)程的當(dāng)前線程棧運行情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容