Linux中Python應用CPU占用高問題排查

2021-09-29 19:20:26 字數 1479 閱讀 8177

公司購買了一套由外部**商提供的呼叫中心系統,在使用的過程中發現其load和cpu占用偏高,由於沒有源**也不太清楚其內部的實現邏輯,只能夠通過觀察系統資源的消耗來排除其問題,以下記錄的是問題排查的過程。

可以看到其load占用為「20.14, 16.42, 19.16」,三個數字分別表示cpu在1分鐘、5分鐘及15分鐘的load,cpu的使用率也偏高,達到了68.8%,占用cpu較高的程序id為281020。

$ ps aux|grep 281020

root 212891 0.0 0.0 103328 848 pts/3 s+ 15:41 0:00 grep 281020

ipcc 281020 39.5 2.6 1025560 425540 ? sl 01:18 341:29 /usr/bin/python ./ctirealtimecdrmain.py default.xml

結果顯示該應用為python應用。

top中加入-h引數,檢視該程序中線程的cpu戰勝情況:

$ top -h -p 281020
結果如下:

可以看到程序281020中線程號為281042的執行緒戰勝的cpu最多。

通過watchpstack命令檢視執行緒中命令的執**況:

可以看到從mysql中讀取資料占用資源較多。

進一步通過strace命令進行驗證:

$ strace -f -p 281042
結果如下:

其中大量的資料在執行資料庫的寫入(write)及讀取(read)操作,上面的pstack命令並沒有反映出write的問題,那問題應該出現在資料庫的read操作上,初步猜測是資料庫的select語句有問題,或者是沒有走索引。

進一步檢查mysql的慢日誌發現:

其中有大量的查詢慢日誌,sql中使用了全表掃瞄的count、max、min這樣的函式,終於確認問題造成的原因了,餘下的就是讓對方對做優化了。

Linux中Python應用 模組篇

二 subprocess模組 linux 三 pexpect模組 linux 四 smtplib模組 五 time模組 六 pyinotify模組 linux 功能 使python檔案成為命令且附帶引數 功能 退出python指令碼 功能 輸出程式初始化查詢路徑 功能 呼叫shell命令,並接收命令...

Linux中為Python應用安裝uwsgi

一般直接用pip install uwsgi可能會出錯,所以在這之前先安裝其他必要的引用庫 yum groupinstall development tools yum install zlib devel bzip2 devel pcre devel openssl devel ncurses d...

C 中 的應用

的應用主要有以下3種 1 按位與 3 引用操作 1 按位與 都是1才為1,否則為0 與1相與數值不變,0相與數值變為0 2 按位或 都是0才為0,否則為1 與0相或數值不變,與1相或數值變1 3 按位異或 相同為0,不同為1 與0異或數值不變,與1異或數值相反 4 按位取反 eg 1 1111 11...