一文學會java死鎖和cpu
關注:85 發布時間:2021-11-04 15:13:05
做一個積極的人
編碼,改變bug,提升自己
我有一個天堂,以編程為主,春天開花
一個工人要想把工作做好,首先必須磨利他的工具
00 本文簡介
作為的一個技術程或者說是一頭攻城獅子,你必須對下面兩個問題有所了解。也許你在實際工作或面試中遇到過:
第一個問題:java死鎖如何排查和解決?
第二個問題:服務器cpu占用率高達到排查和解決?
第三個問題:有哪些工具能夠快速查看線程使用情況?
本文總結了這三個問題,并通過實例加以說明。精彩干貨不容錯過!
前戲那么多,高潮也會很多。干得好,我們言歸正傳,開船吧,我們走!
01 java死鎖排查和解決
要排除故障并解決死鎖,首先考慮三個問題:
1. 什么是死鎖?
2. 為什么會出現死鎖?
3. 怎么排查代碼中出現了死鎖?
4. 如何避免寫出死鎖的代碼?
作為一個技術員(工程師),當有問題的時候,可以盡快解決。但是在學習技術知識的時候,還是腳踏實地,多問為什么,一個好問題就能讓你思考,一定要鍛煉自己這方面的能力,這樣才能更好的理解和掌握知識,探索/觸及更深的地方。
1、啥是死鎖?
死鎖是指在兩個或多個進程執行過程中,由于爭奪資源或相互通信而導致的阻塞現象。沒有外力,他們就無法前進。這個時候說系統處于死鎖狀態或者系統出現死鎖,這些一直在互相等待的進程就叫做死鎖進程。【搜索百科:死鎖】
注:進程和線程都可以發生死鎖,只要滿足死鎖的條件!
2、為啥子會出現死鎖?
從以上概念,我們知道
(1)必須有兩個或多個進程(線程)
(2)必須有競爭資源
3、怎么排查代碼中出現了死鎖?【重點來了】
首先,整個死鎖代碼,看例子:
執行上述代碼后,會出現死鎖,因此故障排除方法如下:
第一個姿勢:使用 jps jstack
一:在windons命令窗口,使用jps-l[如果你不用jps,請自己查資料]
二:使用jstack-l 12316[如果您不能使用jstack,請自行檢查信息]
第二個姿勢:使用jconsole
在窗口中打開jconsole,jconsole是一個圖形化的監控工具!
一:在windons命令窗口中,輸出jconsole,如下所示:
二:選擇線程的標簽。
第三個姿勢:使用java visual vm
在窗口中打開jvisuam,這是一個圖形化的監控工具!
一:在windons命令窗口,輸出jvisuam
二:仍然切換到線程的選項卡,并且有一個明顯的提示!
4、如何避免死鎖?
上面的
在談了死鎖的原因和三種檢測和排除死鎖的方法后,更重要的是如何避免死鎖。如果編寫的代碼能夠避免死鎖,就不會有這樣的故障排除過程。比較好是從源頭控制問題,不要以后遇到問題就填坑。
我看了阿里巴巴比較新的開發協議,里面有避免死鎖的說明,如下:
【強制】同時鎖定多個資源、數據庫表和對象時,需要保持一致的鎖定順序,否則可能會發生死鎖。注意:線程1在更新之前需要依次鎖定所有表a、b、c,所以線程2的鎖定順序也必須是a、b、c,否則可能會發生死鎖。
02、java cpu 排查技巧
第一個姿勢,步驟有點多,難度四星
平時多積累一點,這樣遇到問題,求助的話就少了。如果實際開發中遇到cpu 問題,如何排除故障?如果你沒有遇到這個問題,請思考10秒。如果遇到了,這個時候可以再復習。
一,用top命令查看高cpu消耗的pid
目前占據cup 的pid是3455。
二,通過jps找到當前用戶下的java程序pid
執行jps -l可以打印出所有應用的pid,發現有一個pid和這個cpu用的id是一樣的!我們就知道是哪種服務了。知道了相應的服務,接下來的分析步驟。
三,使用pidstat -p pid 1 3 -u -t
-p:指定流程編號
-u:默認參數,顯示每個進程的cpu使用統計
-t:顯示除了選擇任務的線程的統計信息之外的附加信息
四,找到了cpu占用率高的線程tid。通過上圖,發現3467的tid占用了很大的cpu
五,因為jstack命令的輸出文件中記錄的線程id是十六進制的。因此,我們首先將tid轉換為十六進制表示,轉換模式參見下圖。
把3467轉換成十六進制d8d,注意是小寫!記下來,以后用。
六,通過jstack [-l] pid輸出當前進程的線程信息
儀表流程圖/溫度/測試日志
七,找到tid對應的線程(輸出線程id是十六進制),找到對應的代碼,用命令找到,不要用肉眼對比,請思考具體的命令,給你一個展示的機會。
找到之后,分析一下這個線程在做什么,為什么會占用那么多cup資源。
ps:線程的幾種狀態描述如下:
新的,沒有開始。不會出現在轉儲中。
runnable,在虛擬機中執行。
blocked,blocked,等待顯示器鎖定。
觀察,無限期等待另一個線程執行特定的操作。
timed_wating,在有限的時間內等待另一個線程的特定操作。
終止,退出。
第二個姿勢,待開發[奸笑臉]
這里省略了很多文字。
03 推薦兩個高效排查問題工具
一:顯示繁忙的java線程
地址:show-busy-java-threads:https://github.com/old tlee/有用-scripts/blob/master/docs/java . md #-show-busy-java-threads
簡單的安裝和使用過程:
show-busy-java-線程
上傳服務器并解壓縮
然后執行相應的命令
二:阿里的開源問題定位神器阿爾薩斯被用來定位問題。
網站地址:阿爾薩斯:https://alibaba.github.io/arthas/index.html
這個里面有很多命令。比如線程支持顯示比較忙的前n個線程,一鍵打印棧。比較簡單的線程-n 10可以打印比較忙的十個線程的快照,真的很高效。
介紹了定位神器阿爾薩斯的安裝過程。如果你還沒用過這個工具,建議你用一下。也許你會喜歡!
04 總結
這篇文章內容比較多,基本上是手持教程。希望能對你有所幫助。我也建議沒有遇到過類似問題的伙伴,看完之后親自實踐操作流程。如果沒有環境,他們可以嘗試自己的方式做一個測試的例子。還是那句老話:不要眼高手低,看了和做了本質上兩個概念,比較終收獲的也一定不同。
05 彩蛋-另一個姿勢
通過使用jstack,您還可以發現系統的代碼性能問題
1.在壓力測試期間,使用jps查找應用程序的pid
2.然后使用jstack輸出壓力測試期間應用的轉儲信息
3.在分析輸出的日志文件中,block線程占用的空間比較大,這里可能存在性能問題。找到相應的代碼分析
猜你喜歡
-
家里養文竹的吉兇78人支持
你會在家里養什么植物?也許大多數人會在陽臺養花,因為植物需要光合作用,但有些植物特別耐陰,適合每個人在室內養花。比如文竹,書房里大家養都沒問題,讓它適當受光就行了。如果在這…
-
青蟹怎么保存64人支持
青蟹味道鮮美,營養豐富,但一旦死亡,其細菌就會繁殖并產生毒素。人吃了會引起食物中毒。常見癥狀包括惡心、嘔吐、腹痛和腹瀉。嚴重者,脫水、電解質紊亂、抽搐,甚至休克、昏迷、敗…
-
張國榮玻璃之情表達了什么108人支持
牽手來,空手去;來的安,去的也寫意。哥哥的聲音是永遠懷念的聲音。我抱住過,然而又失去!張國榮創作并演唱了《玻璃之情》,該歌曲收錄在2003年7月發行的《一切隨風》專輯中。在這本…
-
怎么查看別人抖音點贊101人支持
玩tik tok的都知道tik tok是算法推薦顯示的。然而,隨著tik tok創作者和用戶數量的不斷增加,推薦機制也越來越嚴格。最近很多創意視頻推薦都不理想。根據我總結的原因,不推薦…
-
危機公關原則54人支持
描述:隨著互聯網的迅速發展,信息的擴散及影響力開始不斷增加,因此,企業需要非常注重企業危機公關這一塊,接下來,小編就會在文中給網友們詳細介紹一下企業危機公關的基本原則主要有…
-
ugc是什么意思36人支持
我覺得很多自媒體朋友和我一樣。你一定對這些名詞和大v口里的詞有點迷惑,不知道它們是什么意思,比如:什么是pgc,什么是ugc,什么是mcn,kol等等。每次看一些大v講課,吐出這些話,感覺自…
-
芝麻信用750分以上比例41人支持
即使是普通人,支付寶芝麻信用的評分還是難以提高。很多人說申請支付寶積分后很高,甚至直接達到800分的水平。這是一個案例,但只是一個例子。如果你只是普通人,第一次用支付寶的…
-
租微信號是拿來干嘛116人支持
我們提醒很多年輕朋友,今天網上有各種各樣的兼職機會,有些是真的,你可以通過自己的勞動賺點零花錢。有些是假的。他們不僅不給你錢,還騙你很多生活費。還有一些更可怕,如果你稍不…
-
拼多多開店真賺錢嗎?84人支持
現在是互聯網紅利時代。很多創業項目只靠一臺電腦甚至一部可以上網的手機就能賺錢,所以很多人樂于從互聯網上尋找賺錢的方法。這兩年在拼多多開店也是火。到底能不能賺錢?什么…
-
馬云花名叫什么?100人支持
業內眾所周知,馬云有一個武俠夢,他在阿里的花名是“風清”。去年馬云沉迷于微電影《功守道》中的功夫,其主題曲也被命名為《風清揚》 ——。作為市值超過3萬億的大公司創始人,馬…
-
微信有沒有夜間模式76人支持
微信暗黑模式的設置很簡單,只需要五個步驟。點擊微信“我”,在“設置”中選擇“通用”。在“常規”選項的“黑暗模式”中,可以設置黑暗模式。我們來看看詳細的操作步驟。1.打開…
-
喜歡紅色的女人是什么性格215人支持
好了,我們再來看看 《每天懂一點色彩心理學》 里講的你喜歡的顏色和性格有關系哦,來看看紅色吧。喜歡紅色的人的基本性格外向型性格,激情,正義感強。喜歡紅色的人紅色是一種非…
熱門十大品牌
- 2021年我國十大黃金品牌排行榜31000人
- 眼鏡品牌十大排行榜前10名26362人
- 十大證券公司排行榜前10名23243人
- 2021年我國雜志排行榜前10名20054人
- 我國十大雜志排行榜前10名16359人
- 2021我國十個宜居城市排行榜前11487人
- 男士褲子品牌十大排行榜前10名11186人
- 2021十大火熱電腦游戲排行榜前11057人
- 十大衛生巾品牌排行榜前十名8848人
- 我國十大襪子品牌排行榜前十名8372人