成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java程序CPU高占用問(wèn)題實(shí)戰(zhàn)分享

IT那活兒 / 692人閱讀
Java程序CPU高占用問(wèn)題實(shí)戰(zhàn)分享

點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!?。?/strong>


  
對(duì)于作為服務(wù)器算力的核心部件CPU來(lái)說(shuō),異常高的占用會(huì)影響服務(wù)的正常運(yùn)行。
某個(gè)Java應(yīng)用占用過(guò)高CPU,如果不是程序過(guò)于復(fù)雜需要優(yōu)化,則可能是程序邏輯有問(wèn)題,那么如何根據(jù)CPU高占用的現(xiàn)象排查程序問(wèn)題,接下來(lái)通過(guò)實(shí)際案例來(lái)演示。

案例一
1. top命令定位CPU高占用Java進(jìn)程PID.
2. 再使用top -Hp 4315查看該進(jìn)程下各個(gè)線程的cpu使用情況,4315是步驟1中高CPU占用的進(jìn)程號(hào)PID,可觀察到前10個(gè)線程的CPU占用異常高.
3. 選取步驟2中的一個(gè)線程進(jìn)行分析,需要對(duì)其線程號(hào)進(jìn)行進(jìn)制轉(zhuǎn)換,方便下一步查找.
4. 使用jstack查詢具體線程狀態(tài).
Jstack 4315 | grep 0x10fd -A 30
可查看線程狀態(tài)查找關(guān)鍵字向下30行內(nèi)容,可看到線程狀態(tài)為RUNNABLE,根據(jù)下列內(nèi)容定位到代碼ThreadTestWhile.java第15行。
5. 查看代碼邏輯,第15行為死循環(huán),就是它導(dǎo)致了線程一直在運(yùn)行,占用了過(guò)高CPU資源,修改該死循環(huán)即可解決問(wèn)題.

案例二
1. 另外一種情況是可能線程占用資源不是很多,但線程數(shù)量過(guò)多,海量線程數(shù)累計(jì)占用了過(guò)多資源導(dǎo)致CPU過(guò)高,同樣使用top命令定位問(wèn)題進(jìn)程.
2. 再通過(guò)top -Hp 11159查看到異常線程.
3. 選取11183線程進(jìn)行進(jìn)制轉(zhuǎn)換.
4. 使用jstack 11159 | grep 0x2baf -A 30查看到該線程狀態(tài)為WATTING,過(guò)多的等待狀態(tài)線程可能是代碼中鎖了資源導(dǎo)致線程一直處于等待狀態(tài).
5. 本案例代碼中是使用了suspend()方法掛起線程,又沒(méi)有恢復(fù)導(dǎo)致的多線程等待,在程序設(shè)計(jì)時(shí)需要注意避免死鎖的產(chǎn)生.

總 結(jié)

1. 使用top -Hp 定位進(jìn)程中占用CPU最高的線程,并結(jié)合jstack獲取線程快照進(jìn)行分析,如果線程是VM Thread,則應(yīng)該監(jiān)控檢查垃圾回收活動(dòng)頻率,看是否是因?yàn)轭l繁進(jìn)行垃圾回收導(dǎo)致的。
2. Java高占用CPU通常原因都是出現(xiàn)了死循環(huán),通過(guò)如上方法可以輕易定位到問(wèn)題,另外空循環(huán)會(huì)導(dǎo)致間歇性CPU過(guò)高,案例一中top的CPU高占用就呈現(xiàn)出間歇性特點(diǎn)。
3. 代碼邏輯處理不當(dāng)可能會(huì)導(dǎo)致堆內(nèi)存無(wú)法及時(shí)回收導(dǎo)致內(nèi)存泄漏引起CPU飆升,可結(jié)合內(nèi)存進(jìn)行問(wèn)題定位。




本文作者:史鴻杰(上海新炬王翦團(tuán)隊(duì))

本文來(lái)源:“IT那活兒”公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129244.html

相關(guān)文章

  • Java多線程學(xué)習(xí)(七)并發(fā)編程中一些問(wèn)題

    摘要:相比與其他操作系統(tǒng)包括其他類系統(tǒng)有很多的優(yōu)點(diǎn),其中有一項(xiàng)就是,其上下文切換和模式切換的時(shí)間消耗非常少。因?yàn)槎嗑€程競(jìng)爭(zhēng)鎖時(shí)會(huì)引起上下文切換。減少線程的使用。很多編程語(yǔ)言中都有協(xié)程。所以如何避免死鎖的產(chǎn)生,在我們使用并發(fā)編程時(shí)至關(guān)重要。 系列文章傳送門(mén): Java多線程學(xué)習(xí)(一)Java多線程入門(mén) Java多線程學(xué)習(xí)(二)synchronized關(guān)鍵字(1) java多線程學(xué)習(xí)(二)syn...

    dingding199389 評(píng)論0 收藏0
  • 實(shí)戰(zhàn)java并發(fā)程序設(shè)計(jì)第一章

    摘要:通過(guò)指令重排可以減少流水線停頓提升巨大效率原則程序順序原則一個(gè)線程內(nèi)保證語(yǔ)義的串行性。鎖規(guī)則解鎖必然發(fā)生在隨后的加鎖前。線程的方法先于它的每一個(gè)動(dòng)作。 1. 基本概念 同步(Synchronous)和異步(Asynchronous) 并發(fā)(Conncurrency)和并行(Parallelism) 臨界區(qū) 阻塞(Blocking)與非阻塞(Non-Blocking) 死鎖(Deadl...

    moven_j 評(píng)論0 收藏0
  • 記一次PHP并發(fā)性能調(diào)優(yōu)實(shí)戰(zhàn) -- 性能提升104%

    摘要:這是多處理器系統(tǒng)中,調(diào)度器用來(lái)分散任務(wù)到不同的機(jī)制,通常也被稱為處理器間中斷,。文章編寫(xiě)計(jì)劃 待完成: 詳細(xì)介紹用到的各個(gè)工具 作者: 萬(wàn)千鈞(祝星) 適合閱讀人群 文中的調(diào)優(yōu)思路無(wú)論是php, java, 還是其他任何語(yǔ)言都是用. 如果你有php使用經(jīng)驗(yàn), 那肯定就更好了 業(yè)務(wù)背景 框架及相應(yīng)環(huán)境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    番茄西紅柿 評(píng)論0 收藏0
  • 記一次PHP并發(fā)性能調(diào)優(yōu)實(shí)戰(zhàn) -- 性能提升104%

    摘要:這是多處理器系統(tǒng)中,調(diào)度器用來(lái)分散任務(wù)到不同的機(jī)制,通常也被稱為處理器間中斷,。文章編寫(xiě)計(jì)劃 待完成: 詳細(xì)介紹用到的各個(gè)工具 作者: 萬(wàn)千鈞(祝星) 適合閱讀人群 文中的調(diào)優(yōu)思路無(wú)論是php, java, 還是其他任何語(yǔ)言都是用. 如果你有php使用經(jīng)驗(yàn), 那肯定就更好了 業(yè)務(wù)背景 框架及相應(yīng)環(huán)境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    xeblog 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<