多個執行緒的程式CPU跑滿的原因排查

2021-08-15 18:27:53 字數 660 閱讀 7297

今天突然在討論區看到這個帖子,想到了乙個月前我在某東金融研發面試時被問到了同樣的問題,我的回答是top一下,看伺服器程序,然後就沒有然後。。。面試官gg就把我掛了。。。現在總結一下:

只要是跑著的執行緒,那麼都是占用cpu的執行緒,如果乙個程序有多個執行緒在同時執行,那麼cpu佔滿是不可能的,每個執行緒本來就是會被作業系統分配時間片的。舉個栗子:如果3個執行緒同時執行,那麼只有問題執行緒所使用的30%是滿的,3個執行緒同時都是問題執行緒的概率是很小的(但不是沒有可能),所以cpu總體使用率可能是50%以上,但不可能達到100%。

遇到問題程序,這個首先得看是不是程式占得cpu,這個還是可以top一下,檢視效能監測器,確定是某個程式的話,可以通過windbg抓dump進行分析(至於怎麼分析反正我不會,這東西都是破指令,只能遇到之時現學現用,學過一次,用完之後不用很快就忘了……)

可能面試官想聽的是自己做一套執行緒監控,把內部執行緒和系統執行緒id結合,但是實際操作中這個東西反而在很多時候會空耗資源和執行時間。 (不定他只是想讓你在除錯狀態下檢視cpu使用率,然後找到哪個函式cpu占用過高呢。。。但是只要答到面試官想要點子上,面試就不會掛了。。。呵呵)

最後一點,也是最關鍵的一點:從處理的業務入手,啟動執行緒時,加入處理標誌,然後結合日誌。從細微做起,養成良好的新增日誌的習慣,為以後的問題定位排查堵坑。

多少人忙得連寫部落格的時間都沒有喲!

MySQL伺服器CPU跑滿100 的情況分析

我們的原則是,重啟能解決的,絕對不開client cpu100 通常情況下就是有慢sql造成的,這裡的慢sql包括全表掃瞄,掃瞄資料量過大,記憶體排序,磁碟排序,鎖爭用等待等.一般表現現象sql執行狀態為 sending data,copying to tmp table,copying to tm...

伺服器記憶體跑滿是什麼原因造成的

相信大家在使用伺服器的時候會有出現記憶體使用率比較高的情況,這邊給大家說下到底有哪些原因導致記憶體不足 一 應用程式池應用程式池有乙個預設 的時間,到了這個時間就會自動釋放記憶體,這個時間一般是1740分鐘,而這種程度的時間可能會導致應用程式池無法及時釋放記憶體,從而出現記憶體不足的情況發生。如果是...

找出程式cpu使用率高的原因

確定是cpu過高 使用top觀察是否存在cpu使用率過高現象 找出執行緒 對cpu使用率過高的程序的所有執行緒進行排序 ps h e o pid,tid,pcpu,cmd sort pcpu grep 得到如下結果,其中執行緒2909使用了7.8 的cpu.2907 2913 0.0 2907 29...