一次因Java應(yīng)用造成CPU過高的排查實踐過程
前言
最近遇到一個java應(yīng)用造成了服務(wù)器CPU使用率過高,最后查詢,問題是因為在tomcat下重新部署應(yīng)用的時候沒有kill掉tomcat進程,造成應(yīng)用中的數(shù)據(jù)庫連接池進程中的鎖不能被釋放,死循環(huán)造成了cpu使用率過高的現(xiàn)象,詳細原因就不做詳細分析了,主要分享一下問題排查的過程。
使用top命令查詢服務(wù)cpu使用情況

服務(wù)器資源使用率
可以看到31737這個進程的CPU使用率巨大
使用top -Hp 31737查詢31737進程中各個線程的資源使用率
top -Hp 31737
使用top -Hp 31737查詢31737進程中各個線程的資源使用率

31737進程中各個線程的使用率
由于當時的截圖丟失了,簡單說一下,使用top -Hp 31737命令查詢到31737進程中,一個線程id為5322占用CPU過高
使用printf "%x\n" 5322把線程id轉(zhuǎn)化為十六進制
printf "%x\n" 5322
因為打印線程棧的時候,本地線程標識nid是用十六進制表示的,使用該命令把線程id轉(zhuǎn)化為十六進制

5322的十六進制為14ca
使用jstack命令打印堆棧信息
jstack 31737 | grep -10 14ca
使用jstack 31737 | grep -10 14ca打印31737的堆棧信息,并查找本地線程標識為14ca的線程堆棧信息

31737的堆棧信息
如圖,線程的狀態(tài)為TIMED_WAITING,對象等待中,查看源碼

出現(xiàn)問題的代碼
發(fā)現(xiàn)問題的原因就不做詳細分析了,這里主要是分享一下問題排查的過程
度娘一下有個大神回答的不錯,連接在這里,有興趣的可以自己去看一下https://stackoverflow.com/questions/6981564/why-must-the-jdbc-driver-be-put-in-tomcat-home-lib-folder/7198049#7198049

大神的回答
大致原因就是因為在tomcat下重新部署應(yīng)用的時候沒有kill掉tomcat進程,造成應(yīng)用中的數(shù)據(jù)庫連接池進程中的鎖不能被釋放
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Springboot集成Elasticsearch的步驟與相關(guān)功能
ElasticSearch是開源搜索平臺領(lǐng)域的一個新成員,?ElasticSearch是一個基于Lucene構(gòu)建的開源,分布式,RESTful搜索引擎,這篇文章主要給大家介紹了關(guān)于Springboot集成Elasticsearch的相關(guān)資料,需要的朋友可以參考下2021-12-12
spring boot 配置freemarker及如何使用freemarker渲染頁面
springboot中自帶的頁面渲染工具為thymeleaf 還有freemarker這兩種模板引擎,本文重點給大家介紹spring boot 配置freemarker及如何使用freemarker渲染頁面,感興趣的朋友一起看看吧2023-10-10
搜索一文入門ElasticSearch(節(jié)點 分片 CRUD 倒排索引 分詞)
這篇文章主要為大家介紹了搜索一文入門ElasticSearch(節(jié)點 分片 CRUD 倒排索引 分詞)的基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
idea使用帶provide修飾依賴導(dǎo)致ClassNotFound
程序打包到Linux上運行時,若Linux上也有這些依賴,為了在Linux上運行時避免依賴沖突,可以使用provide修飾,本文主要介紹了idea使用帶provide修飾依賴導(dǎo)致ClassNotFound,下面就來介紹一下解決方法,感興趣的可以了解一下2024-01-01
Java負載均衡算法實現(xiàn)之輪詢和加權(quán)輪詢
網(wǎng)上找了不少負載均衡算法的資源,都不夠全面,后來自己結(jié)合了網(wǎng)上的一些算法實現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Java負載均衡算法實現(xiàn)之輪詢和加權(quán)輪詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04
Springcloud中Feign傳遞參數(shù)的過程解析
這篇文章主要介紹了Springcloud中Feign傳遞參數(shù)的過程,單個參數(shù)的傳值有兩種方式,第一種使用@RequestParam/@PathVariable進行傳值,傳遞多個參數(shù):多個參數(shù)的傳值可以使用多個@RequestParam來進行傳參,需要的朋友可以參考下2023-09-09

