查找CPU佔用率達到100%的原因

  最近運行服務器程序,發現某個進程CPU佔用率超過100%,有些奇怪,該進程功能很簡單,主要是用來接受客戶端請求,根據一些算法選擇gate服務器,我們邏輯功能都是寫在腳本層,我查看了該進程腳本層代碼,比較簡單,沒有使用while循環,那問題肯定是在C++底層上,就決定調試下,步驟如下。

1、查找進程id,使用ps命令,截圖如下:

發現出問題的進程id爲18010。

2、查找進程內部出問題的線程,使用命令top –H –p 18010,截圖如下:

發現出問題的線程id是18101。

3、查看進程運行堆棧,使用命令pstack 18010,截圖如下:

發現改線程在運行drop_list_tick函數。

4、查看drop_list_tick函數代碼,截圖如下:

該函數內部有個while循環,由於drop_list沒有使用pop_front函數刪除第一個元素,導致會一直循環下去,所以就出現了死循環,修改後如下:

總結:其實該問題很簡單,就是寫代碼時候,邏輯不太嚴謹造成的,不過因爲這個問題也學會了一些調試技巧,收穫還是不錯的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章