java應(yīng)用cpu飆升(超過(guò)100%)故障排查步驟
前言
害。。。
昨天剛寫(xiě)完一份關(guān)于jvm問(wèn)題排查相關(guān)的博客,今天線上項(xiàng)目就遇到了一個(gè)突發(fā)問(wèn)題。
現(xiàn)象是用戶反映系統(tǒng)非??ǎ瑹o(wú)法操作。
然后登錄服務(wù)器查看發(fā)現(xiàn)cpu 一直100%以上。
具體排查步驟:
1,首先top命令查看服務(wù)器cpu等情況:
發(fā)現(xiàn)線上pid 29737的 java應(yīng)用cpu達(dá)到100%

2,top -H -p pid命令查看具體的線程情況
top -H -p 29373
輸入上述命令,然后按H顯示cpu最高排名的線程。可以看到pid 30013的線程cpu 100%且一直未釋放。

3.將線程的pid轉(zhuǎn)為16進(jìn)制
printf "%x\n" 30013

30013做16進(jìn)制轉(zhuǎn)換為753d
4.使用jvm工具jstack打印該進(jìn)程的堆棧信息
使用該命令打印堆棧信息的后50行
jstack 29737 |grep -A 50 753d

然后就可以具體看到具體的出問(wèn)題的是哪部分代碼了,然后檢查更改即可。(我們的是代碼中出現(xiàn)死循環(huán))
注意問(wèn)題:
可能會(huì)出現(xiàn)以下報(bào)錯(cuò):
xxxx: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
有兩個(gè)可能:
1.jstack后面的進(jìn)程pid不對(duì),或者16進(jìn)制的數(shù)不對(duì)。
需要注意jstack后面是jps的java進(jìn)程id。
2.執(zhí)行該命令的用戶必須和java應(yīng)用所屬的用戶一致。
常見(jiàn)的cpu飆升原因
程序中存在死循環(huán)或者長(zhǎng)時(shí)間占用 CPU 的操作。比如,不合理的遞歸操作、循環(huán)操作等等。
程序中存在大量的計(jì)算操作,例如復(fù)雜的算法、大量的數(shù)值計(jì)算等等。
程序中存在大量的 IO 操作,例如讀寫(xiě)文件、網(wǎng)絡(luò)通信等等。
程序中存在大量的線程創(chuàng)建和銷毀操作,以及線程間的競(jìng)爭(zhēng)和同步操作。
程序中存在內(nèi)存泄漏或者內(nèi)存溢出,導(dǎo)致 JVM 不斷進(jìn)行垃圾回收。
程序中存在大量的數(shù)據(jù)庫(kù)操作,導(dǎo)致數(shù)據(jù)庫(kù)連接池的耗盡和數(shù)據(jù)庫(kù)負(fù)載過(guò)高。
針對(duì)這些問(wèn)題,需要具體情況具體分析,采取相應(yīng)的優(yōu)化措施,例如修改代碼邏輯、優(yōu)化算法、降低 IO 操作頻率、減少線程創(chuàng)建和銷毀、增加 JVM 內(nèi)存等等。
總結(jié)
到此這篇關(guān)于java應(yīng)用cpu飆升(超過(guò)100%)故障排查步驟的文章就介紹到這了,更多相關(guān)java應(yīng)用cpu飆升故障內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java實(shí)戰(zhàn)CPU占用過(guò)高問(wèn)題的排查及解決
- Java應(yīng)用CPU使用率過(guò)高排查方式
- Linux系統(tǒng)java進(jìn)程CPU占用過(guò)高的問(wèn)題及排查
- Java進(jìn)程CPU使用率過(guò)高排查步驟詳細(xì)講解
- 一次因Java應(yīng)用造成CPU過(guò)高的排查實(shí)踐過(guò)程
- Java應(yīng)用程序CPU100%問(wèn)題排查優(yōu)化實(shí)戰(zhàn)
- Java線上CPU內(nèi)存沖高問(wèn)題排查解決步驟
- 詳解Java程序?qū)е翪PU打滿如何排查
相關(guān)文章
動(dòng)態(tài)修改spring?aop?切面信息提升自動(dòng)日志輸出框架效率
這篇文章主要為大家介紹了動(dòng)態(tài)修改spring?aop切面信息提升自動(dòng)日志輸出框架效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
SpringCloud手寫(xiě)Ribbon實(shí)現(xiàn)負(fù)載均衡
這篇文章主要介紹了SpringCloud手寫(xiě)Ribbon實(shí)現(xiàn)負(fù)載均衡的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Servlet3.0實(shí)現(xiàn)文件上傳的方法
本篇文章主要介紹了Servlet實(shí)現(xiàn)文件上傳的方法,所謂文件上傳就是將本地的文件發(fā)送到服務(wù)器中保存。有興趣的可以了解一下。2017-03-03
SpringBoot實(shí)現(xiàn)Tomcat集群的會(huì)話管理功能
在使用 Tomcat 集群時(shí),由于每個(gè) Tomcat 實(shí)例的 Session 存儲(chǔ)是獨(dú)立的,導(dǎo)致無(wú)法實(shí)現(xiàn) Session 的共享,這可能影響到用戶跨節(jié)點(diǎn)的訪問(wèn),為了實(shí)現(xiàn)跨 Tomcat 實(shí)例共享 Session,可以使用 Spring Session 配合 Redis 進(jìn)行集中式會(huì)話管理,需要的朋友可以參考下2024-12-12
java并發(fā)編程專題(一)----線程基礎(chǔ)知識(shí)
這篇文章主要介紹了java并發(fā)編程線程的基礎(chǔ)知識(shí),文中講解非常詳細(xì),幫助大家更好的學(xué)習(xí)JAVA并發(fā)編程,感興趣想學(xué)習(xí)JAVA的可以了解下2020-06-06
SprinBoot如何集成參數(shù)校驗(yàn)Validator及參數(shù)校驗(yàn)的高階技巧
這篇文章主要介紹了SprinBoot如何集成參數(shù)校驗(yàn)Validator及參數(shù)校驗(yàn)的高階技巧包括自定義校驗(yàn)、分組校驗(yàn),本文分步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程
Cursor.so 是一個(gè)集成了 GPT-4 的國(guó)內(nèi)直接可以訪問(wèn)的,優(yōu)秀而強(qiáng)大的免費(fèi)代碼生成器,可以幫助你快速編寫(xiě)、編輯和討論代碼,這篇文章主要介紹了智能 AI 代碼生成工具 Cursor 安裝和使用介紹,需要的朋友可以參考下2023-05-05
Springboot整合Gson報(bào)錯(cuò)問(wèn)題解決過(guò)程
這篇文章主要介紹了Springboot整合Gson報(bào)錯(cuò)問(wèn)題解決過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

