一次線上CPU高的問題排查實踐


一次線上CPU高的問題排查實踐

前言

近期某一天上班一開電腦,就收到了運維警報,有兩台服務CPU負載很高,同時收到一線同事反饋 系統訪問速度非常慢,幾乎無響應。

一個美好的早晨,最怕什么就來什么。只好推掉其他會議,專心搞定問題。

排查

登錄系統一看,后端的接口訪問果然全部超時。

  1. 先使用top命令查看下是由哪個進程占用CPU較高。

從圖上可看出,pid=26481的Java進程占用了385%的CPU,機器是4核8G的配置。

2.然后查看下是哪個Java應用 ps -ef | grep java

發現是我們后端request服務的應用。

3.獲取pid后,可以查看該進程下的線程列表。 命令: ps -mp pid -o THREAD,tid,time。

.png)

這里我們可以看出有4個線程,長時間占用較高的CPU資源。拿到一個tid=26496,printf "%x\n" tid , 轉為16進制:6780

4.使用jstack打印線程的堆棧信息,./jstack pid | grep tid -A 30

從圖上可看出,是由於該應用的GC異常導致CPU占用較高。

5.導出堆棧日志分析。 jstack 26481 >> jstat.out

解決問題

分析導出jstat.out,查找下RUNNABLE狀態的線程。

ps:這里推薦一個分析日志的網站,超級好用,能生成圖形界面的分析日志。只需要將生產的日志上傳。Java Thread Dump Analyzer https://fastthread.io/

最終發現是Excel大量導出的問題。用戶導出一年的財務報表,差不多近60萬條數據,由於系統導出較慢,然后進行了多次點擊下載,導致應用內存不足,頻繁GC, 導致CPU超高,系統假死。

至此問題發現,解決問題就變得簡單了。

  • 重啟應用,讓用戶使用優先。 最快捷、最有效的解決方式,哈哈
  • 前端限制按鈕點擊次數。
  • 后端Excel下載優化(考慮阿里的easyexcel,詳細請看后續分享),以及將文件下載獨立出一個微服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM