CPU跑滿(mǎn)或跑高
如果服務(wù)器上的CPU持續(xù)跑高,則會(huì)對(duì)系統(tǒng)穩(wěn)定性和業(yè)務(wù)運(yùn)行造成影響。以下對(duì)CPU占用率較高問(wèn)題的排查分析做簡(jiǎn)要說(shuō)明。
使用vmstat 查看系統(tǒng)緯度的 CPU 負(fù)載
您可以通過(guò)vmstat從系統(tǒng)維度查看CPU資源的使用情況。
用法說(shuō)明:
l 命令:
1. vmstat -n 1
2. # -n 1 表示結(jié)果一秒刷新一次。
l 示例輸出:
l 返回結(jié)果中的主要數(shù)據(jù)列說(shuō)明:
r:表示系統(tǒng)中 CPU 等待處理的線(xiàn)程。由于 CPU 每次只能處理一個(gè)線(xiàn)程,所以,該數(shù)值越大,通常表示系統(tǒng)運(yùn)行越慢。
us:用戶(hù)模式消耗的 CPU 時(shí)間百分比。該值較高時(shí),說(shuō)明用戶(hù)進(jìn)程消耗的 CPU 時(shí)間比較多,比如,如果該值長(zhǎng)期超過(guò) 50%,則需要對(duì)程序算法或代碼等進(jìn)行優(yōu)化。
sy:內(nèi)核模式消耗的 CPU 時(shí)間百分比。
wa:IO 等待消耗的 CPU 時(shí)間百分比。該值較高時(shí),說(shuō)明IO等待比較嚴(yán)重,這可能磁盤(pán)大量作隨機(jī)訪(fǎng)問(wèn)造成的,也可能是磁盤(pán)性能出現(xiàn)了瓶頸。
id:處于空閑狀態(tài)的 CPU 時(shí)間百分比。如果該值持續(xù)為 0,同時(shí) sy 是 us 的兩倍,則通常說(shuō)明系統(tǒng)則面臨著 CPU 資源的短缺。
使用top查看進(jìn)程緯度的CPU負(fù)載
您可以通過(guò)top從進(jìn)程緯度來(lái)查看其CPU、內(nèi)存等資源的使用情況。
用法說(shuō)明:
l 命令:
1. top
l 示例輸出:
l 回顯說(shuō)明:默認(rèn)界面上第三行會(huì)顯示當(dāng)前CPU資源的總體使用情況,下方會(huì)顯示各個(gè)進(jìn)程的資源占用情況。
可以直接在界面輸入大寫(xiě)字母P,來(lái)使監(jiān)控結(jié)果按CPU使用率倒序排列,進(jìn)而定位系統(tǒng)中占用CPU較高的進(jìn)程。最后,根據(jù)系統(tǒng)日志和程序自身相關(guān)日志,對(duì)相應(yīng)進(jìn)程做進(jìn)一步排查分析,以判斷其占用過(guò)高 CPU 的原因。
操作案例
使用top直接終止CPU消耗較大的進(jìn)程
如前面所述,可以通過(guò)top命令查看系統(tǒng)的負(fù)載問(wèn)題,并定位耗用較多CPU資源的進(jìn)程。
您可以直接在top運(yùn)行界面快速終止相應(yīng)的異常進(jìn)程。說(shuō)明如下:
1.想要終止某個(gè)進(jìn)程,只需按下小寫(xiě)的k鍵。
2.輸入想要終止的進(jìn)程PID(top輸出結(jié)果的第一列)。比如,如下圖所示,假如想要終止 PID 為 23 的進(jìn)程,輸入 23后按回車(chē)。
3. 如下圖所示,操作成功后,界面會(huì)出現(xiàn)類(lèi)似 Send pid 23 signal [15/sigterm] 的提示信息讓用戶(hù)進(jìn)行確認(rèn)。按回車(chē)確認(rèn)即可。
CPU使用率較低但負(fù)載較高
問(wèn)題描述
Linux 系統(tǒng)沒(méi)有業(yè)務(wù)程序運(yùn)行,通過(guò) top 觀(guān)察,類(lèi)似如下圖所示,CPU 很空閑,但是 load average 卻非常高,如下圖所示。
處理辦法
load average 是對(duì) CPU 負(fù)載的評(píng)估,其值越高,說(shuō)明其任務(wù)隊(duì)列越長(zhǎng),處于等待執(zhí)行的任務(wù)越多。出現(xiàn)此種情況時(shí),可能是由于僵死進(jìn)程導(dǎo)致的??梢酝ㄟ^(guò)指令 ps -axjf 查看是否存在 D 狀態(tài)進(jìn)程。
D 狀態(tài)是指不可中斷的睡眠狀態(tài)。該狀態(tài)的進(jìn)程無(wú)法被 kill,也無(wú)法自行退出。只能通過(guò)恢復(fù)其依賴(lài)的資源或者重啟系統(tǒng)來(lái)解決。
kswapd0 進(jìn)程占用 CPU 較高
操作系統(tǒng)都用分頁(yè)機(jī)制來(lái)管理物理內(nèi)存,操作系統(tǒng)將磁盤(pán)的一部分劃出來(lái)作為虛擬內(nèi)存,由于內(nèi)存的速度要比磁盤(pán)快得多,所以操作系統(tǒng)要按照某種換頁(yè)機(jī)制將不需要的頁(yè)面換到磁盤(pán)中,將需要的頁(yè)面調(diào)到內(nèi)存中,由于內(nèi)存持續(xù)不足,這個(gè)換頁(yè)動(dòng)作持續(xù)進(jìn)行,kswapd0是虛擬內(nèi)存管理中負(fù)責(zé)換頁(yè)的,當(dāng)服務(wù)器內(nèi)存不足的時(shí)候kswapd0會(huì)執(zhí)行換頁(yè)操作,這個(gè)換頁(yè)操作是十分消耗主機(jī)CPU資源的。如果通過(guò)top發(fā)現(xiàn)該進(jìn)程持續(xù)處于非睡眠狀態(tài),且運(yùn)行時(shí)間較長(zhǎng),可以初步判定系統(tǒng)在持續(xù)的進(jìn)行換頁(yè)操作,可以將問(wèn)題轉(zhuǎn)向內(nèi)存不足的原因來(lái)排查。
問(wèn)題描述
kswapd0 進(jìn)程占用了系統(tǒng)大量 CPU 資源。
處理辦法
Linux 系統(tǒng)通過(guò)分頁(yè)機(jī)制管理內(nèi)存的同時(shí),將磁盤(pán)的一部分劃出來(lái)作為虛擬內(nèi)存。而 kswapd0 是 Linux 系統(tǒng)虛擬內(nèi)存管理中負(fù)責(zé)換頁(yè)的進(jìn)程。當(dāng)系統(tǒng)內(nèi)存不足時(shí),kswapd0 會(huì)頻繁的進(jìn)行換頁(yè)操作。而由于換頁(yè)操作非常消耗 CPU 資源,所以會(huì)導(dǎo)致該進(jìn)程持續(xù)占用較高 CPU 資源。
如果通過(guò) top 等監(jiān)控發(fā)現(xiàn) kswapd0 進(jìn)程持續(xù)處于非睡眠狀態(tài),且運(yùn)行時(shí)間較長(zhǎng)并持續(xù)占用較高 CPU 資源,則通常是由于系統(tǒng)在持續(xù)的進(jìn)行換頁(yè)操作所致。則可以通過(guò) free 、ps 等指令進(jìn)一步查詢(xún)系統(tǒng)及系統(tǒng)內(nèi)進(jìn)程的內(nèi)存占用情況,做進(jìn)一步排查分析。
如問(wèn)題還沒(méi)有解決,請(qǐng)?zhí)峤还握?qǐng)技術(shù)幫忙協(xié)助排查。
帶寬跑滿(mǎn)或跑高
對(duì)于正常進(jìn)程導(dǎo)致的帶寬跑滿(mǎn)或跑高的問(wèn)題,需要對(duì)服務(wù)器的帶寬進(jìn)行升級(jí)。對(duì)于異常進(jìn)程,有可能是由于惡意程序問(wèn)題,或者是部分 IP 惡意訪(fǎng)問(wèn)導(dǎo)致,也可能是服務(wù)遭到了 CC 攻擊。
通常情況下,您可以使用 iftop 工具或 nethogs 查看流量的占用情況,進(jìn)而定位到具體的進(jìn)程。
使用iftop工具排查
1.在服務(wù)器內(nèi)部安裝iftop流量監(jiān)控工具。
yum install iftop -y
2.服務(wù)器外網(wǎng)帶寬被占滿(mǎn)時(shí),如果通過(guò)遠(yuǎn)程無(wú)法登陸,可通過(guò)VNC登錄到服務(wù)器內(nèi)部,運(yùn)行下面命令查看流量占用情況:
iftop -i eth1 –P
注意:-P參數(shù)將會(huì)顯示請(qǐng)求端口。執(zhí)行 iftop -i eth0 –P命令,可以查看通過(guò)服務(wù)器哪個(gè)端口建立的連接,以及內(nèi)網(wǎng)流量。舉例如下:
在上圖中,您可以查看到流量高耗的是服務(wù)器上 53139 端口和 115.205.150.235 地址建立的連接。
3. 執(zhí)行 netstat 命令反查 53139 端口對(duì)應(yīng)的進(jìn)程。
netstat -tunlp |grep 53139
4.經(jīng)反查,服務(wù)器上 vsftpd 服務(wù)產(chǎn)生大量流量,您可以通過(guò)停止服務(wù)或使用 iptables 服務(wù)來(lái)對(duì)指定地址進(jìn)行處理,如屏蔽 IP 地址或限速,以保證服務(wù)器帶寬能夠正常使用。
使用nethogs進(jìn)行排查
1.在服務(wù)器內(nèi)部安裝nethogs流量監(jiān)控工具。
yum install nethogs -y
2.通過(guò)nethogs工具來(lái)查看網(wǎng)卡上進(jìn)程級(jí)的流量信息,若未安裝可以通過(guò)yum、apt-get等方式安裝。舉例如下:
a. 若 eth1 網(wǎng)卡跑滿(mǎn),執(zhí)行命令 nethogs eth1。
b. 查看每個(gè)進(jìn)程的網(wǎng)絡(luò)帶寬情況以及進(jìn)程對(duì)應(yīng)的 PID。
c. 確定導(dǎo)致帶寬跑滿(mǎn)或跑高的具體進(jìn)程。
3. 若進(jìn)程確定是惡意程序,可以通過(guò)執(zhí)行 kill -TERM <PID> 來(lái)終止程序。
說(shuō)明:如果是 Web 服務(wù)程序,您可以使用 iftop 等工具來(lái)查詢(xún)具體 IP 來(lái)源,然后分析 Web 訪(fǎng)問(wèn)日志是否為正常流量。日志分析可以使用 logwatch 或 awstats 等工具進(jìn)行。
如問(wèn)題還沒(méi)有解決,請(qǐng)?zhí)峤还温?lián)系技術(shù)為您處理。