最近碰到一個很蛋痛的問題,,我在公司的代碼上實現了一個功能,然后基於這個測試,結果比對數據發現每天少三千多萬條,,
然后我各種優化,各種零碎部功能閹割,,還是丟數據!
之后,監控運行網卡----watch -n 1 "ifconfig eth2",,,發現網卡丟數據!
之后把修改之前的程序拿上來運行,發現網卡還丟!
之后查看CPU的使用情況,top
發現有好多CPU被 cpuspeed 限速了,,,懷疑可能是我程序運行的時候選了一個不常用的CPU,而這個CPU可能就是1.2GHz,,影響了程序處理頻率;
查看CPU使用情況的方法:
1,top; 可以用 ps aux |grep XXX 或者 pgrep XXX ,,找出你所要查找的進程號 之后 top -p 進程號 單獨查看該進程的CPU 內存等使用情況;
你可以用 ps -eLf |grep XXX 來查看程序運行所產生的線程情況; 也可以用 ps axms | grep XXX;
2,mpstat;默認輸出所有CPU使用情況的平均值,用 mpstat -P ALL 命令查看所有的CPU使用情況;
3,ps; 使用ps命令,可以很清楚的看出到底是哪一條進程在吃CPU.排在前面的占用的CPU越多, ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20 顯示占用CPU最多的20個進程;
4,查看當前進程下參數CPU的使用情況, cat /proc/cpuinfo ,羅列了所有CPU的使用情況,你也可以過濾里邊的單獨參數,比如查看所有CPU的頻率,cat /proc/cpuinfo | grep -i MHz;
5,vmstat 一般腳本監控文件時,用他與awk 命令配合使用(未驗證過)。
發現上邊這個情況后,馬上聯系甲方處理。
處理方法: from:http://blog.sina.com.cn/s/blog_5f2ca1ed0101cz6f.html
1.物理服務器BIOS做設置 關閉節能開啟最大CPU資源使用
做完該操作后,查看cpu主頻仍然是1.2GHz
2.chkconfig --list |grep cpuspeed 發現該服務1,2,3,4,5級別均開機啟動
關閉該服務,並關閉開機啟動,解決該問題。
另外,CPU性能可能也還會與 irqbalance服務 有關。
可以點擊文章: cpuspeed和irqbalance服務器的兩大性能殺手 備注:之前那個鏈接不知道為啥點不過去,換了一個鏈接.
補充:
查看某一個進程內部當前運行的有多少線程,還有以下幾個方法值得一用。
1.根據進程號進行查詢:
# pstree -p 進程號
# top -Hp 進程號
2.根據進程名字進行查詢:
# pstree -p `ps -e | grep server | awk '{print $1}'`
# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l
這里利用了管道和命令替換,
關於命令替換,我也是今天才了解,就是說用``括起來的命令會優先執行,然后以其輸出作為其他命令的參數,
上述就是用 ps -e | grep server | awk '{print $1}' 的輸出(進程號),作為 pstree -p 的參數
管道和命令替換的區別是:
管道:管道符號"|"左邊命令的輸出作為右邊命令的輸入
命令替換:將命令替換符"``"中命令的輸出作為其他命令相應位置的參數
文章內容來源: 功夫Panda 的 Linux下查看某個進程的線程數量.