服務器cpu占用100%,如何排查(java進程&sql)


服務端cpu占用100%,如何排查?本文從java進程和sql給出排查思路。

 

A.java進程---大致流程是找出進程的pid-找到進程下占用資源最大的線程-用jstack打印出進程快照

linux:

1.top -c找到占用cpu較高的進程,獲取到[pid]

2.top -Hp [pid],查看該進程對應的線程,找到線程中占用cpu較高的線程id(tid)

3.jstack -l [pid] > /path/[pid].stack,打印出進程此時的快照

4.vi [pid].stack或者cat [pid].stack|grep '[tid]的16進制' -C 8,查看該線程在cpu占用100%時做了什么

使用截圖:

windows:

1.在任務管理中找到占用cpu較高的進程,獲取[pid]

2.使用Process Explorer獲取該[pid]對應的線程,找到占用資源較高的線程id(tid)

3.cmd窗口中輸入jstack -l [pid] > /path/[pid].txt

4.打開文件[pid].txt,查找[tid]的16進制所在的行,查看具體信息

 

B.sql進程---例如在top -c中看到某個select占cpu100%...大致流程是找出當前具體是哪條sql在跑,再結合代碼與業務分析

在pgsql或navicat等sql工具的客戶端找到“服務器狀態”,然后可以看到服務端此時的sql動態,再將sql具體語句找到,進行分析:

 


免責聲明!

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



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