背景:近期一個模塊(暫且稱為A)新上了一個需求,改動了些代碼,在測試環境部署之后,該模塊系統CPU使用率動不動就飆升到90%,甚至200%,嚴重影像其他業務執行。
排查過程
1.使用top查看當前CPU使用情況,找到CPU使用率高的Java進程PID 104234

2.根據進程PID,找到對應的服務
ps -ef | grep 104234
確認為之前修改過的模塊A
3.查看當前進程PID下所有的線程占用CPU情況,得到占用率最高線程PID 16466
top -H -p 104234
將這個線程PID轉換成16進制,轉換后為4052
4.使用jstack命令將進程PID 104234信息導出到文件104234.log
jstack 104234 > 104234.log
在104234.log中查找4052
可以找到項目中具體的執行線程,接下來就是看該線程的執行邏輯是怎樣的了,在idea中全局搜索該線程名,找到該線程的具體使用場景,進一步排查代碼中可能導致CPU占用率過高的原因。