當(dāng)您發(fā)現(xiàn)云服務(wù)器的運(yùn)行速度變慢或云服務(wù)器突然出現(xiàn)網(wǎng)絡(luò)斷開(kāi)現(xiàn)象,則可能是云服務(wù)器的帶寬和CPU使用率過(guò)高導(dǎo)致。如果您已經(jīng)通過(guò)云監(jiān)控服務(wù)創(chuàng)建過(guò)告警任務(wù),當(dāng)CPU或帶寬利用率高時(shí),系統(tǒng)會(huì)自動(dòng)發(fā)送告警給您。
Linux實(shí)例帶寬流量過(guò)高或CPU使用率高,您可以按如下步驟進(jìn)行排查:
問(wèn)題定位:定位影響云服務(wù)器帶寬和CPU使用率高的進(jìn)程。
問(wèn)題處理:排查進(jìn)程是否正常,并分類進(jìn)行處理。
正常進(jìn)程:優(yōu)化程序,或變更云服務(wù)器的配置。
異常進(jìn)程:建議您手動(dòng)關(guān)閉進(jìn)程,或者借助第三方工具關(guān)閉進(jìn)程。
常用命令
本文相關(guān)操作命令以CentOS 7.2 64位操作系統(tǒng)為例。其它版本的Linux操作系統(tǒng)命令可能有所差異,具體情況請(qǐng)參閱相應(yīng)操作系統(tǒng)的官方文檔。
Linux云服務(wù)器查看CPU使用率等性能相關(guān)問(wèn)題時(shí)的常用命令如下:
ps-aux
ps-ef
top
CPU占用率高問(wèn)題定位
使用VNC功能登錄云服務(wù)器。
執(zhí)行如下命令查看當(dāng)前系統(tǒng)的運(yùn)行狀態(tài)。
top
系統(tǒng)回顯樣例如下:
查看顯示結(jié)果。
命令回顯第一行:20:56:02 up 37 days,1 user,load average:0.00,0.01,0.05的每個(gè)字段含義如下:
系統(tǒng)當(dāng)前時(shí)間為20:56:02,該云服務(wù)器已運(yùn)行37天,當(dāng)前共有1個(gè)用戶登錄,最近1分鐘、最近5分鐘和最近15分鐘的CPU平均負(fù)載。
命令回顯第三行:CPU資源總體使用情況。
命令回顯第四行:內(nèi)存資源總體使用情況。
回顯最下方顯示各進(jìn)程的資源占用情況。
說(shuō)明:
在top頁(yè)面,可以直接輸入小寫(xiě)“q”或者在鍵盤(pán)上按“Ctrl+C”退出。
除了直接輸入命令,您還可以單擊VNC登錄頁(yè)面屏幕右上角的“Input Command”,在彈出的對(duì)話框中粘貼或者輸入相應(yīng)命令,單擊“Send”。
在top運(yùn)行中常用的內(nèi)容命令如下:
s:改變畫(huà)面更新頻率。
l:關(guān)閉或開(kāi)啟第一部分第一行top信息的表示。
t:關(guān)閉或開(kāi)啟第一部分第二行Tasks和第三行Cpus信息的表示。
m:關(guān)閉或開(kāi)啟第一部分第四行Mem和第五行Swap信息的表示。
N:以PID的大小的順序排列進(jìn)程列表。
P:以CPU占用率大小的順序排列進(jìn)程列表。
M:以內(nèi)存占用率大小的順序排列進(jìn)程列表。
h:顯示命令幫助。
n:設(shè)置在進(jìn)程列表所顯示進(jìn)程的數(shù)量。
通過(guò)ll/proc/PID/exe命令可以查看每個(gè)進(jìn)程ID對(duì)應(yīng)的程序文件。
CPU使用率高問(wèn)題處理
對(duì)于導(dǎo)致CPU使用率高的具體進(jìn)程,如果確認(rèn)是異常進(jìn)程,可以直接通過(guò)top命令終止進(jìn)程。對(duì)于kswapd0進(jìn)程導(dǎo)致的CPU使用率高的問(wèn)題,則需要對(duì)應(yīng)用程序進(jìn)行優(yōu)化,或者通過(guò)增加內(nèi)存進(jìn)行系統(tǒng)規(guī)格的升級(jí)。
kswapd0是系統(tǒng)的虛擬內(nèi)存管理程序,如果物理內(nèi)存不夠用,系統(tǒng)就會(huì)喚醒kswapd0進(jìn)程,由kswapd0分配磁盤(pán)交換空間用作緩存,因而占用大量的CPU資源。
使用top命令終止CPU占用率高的進(jìn)程
您可以直接在top運(yùn)行界面快速終止相應(yīng)的異常進(jìn)程。操作步驟如下:
在top命令運(yùn)行的同時(shí),按下小寫(xiě)的“k”鍵。
輸入要終止進(jìn)程的PID。
進(jìn)程的PID為top命令回顯的第一列數(shù)值。例如,要終止PID為52的進(jìn)程,直接輸入“52”后回車。
操作成功后,會(huì)出現(xiàn)如下圖所示類似信息,按回車確認(rèn)。
kswapd0進(jìn)程占用導(dǎo)致CPU使用率高
可通過(guò)以下步驟排查進(jìn)程的內(nèi)存占用情況。
通過(guò)top命令查看kswapd0進(jìn)程的資源使用。
如果kswapd0進(jìn)程持續(xù)處于非睡眠狀態(tài),且運(yùn)行時(shí)間較長(zhǎng),可以初步判定系統(tǒng)在持續(xù)的進(jìn)行換頁(yè)操作,可以將問(wèn)題轉(zhuǎn)向內(nèi)存不足的原因來(lái)排查。
通過(guò)vmstat命令進(jìn)一步查看系統(tǒng)虛擬內(nèi)存的使用情況。
如果si和so的值也比較高,說(shuō)明系統(tǒng)存在頻繁的換頁(yè)操作,系統(tǒng)物理內(nèi)存不足。
si:每秒從交換區(qū)寫(xiě)到內(nèi)存的大小,由磁盤(pán)調(diào)入內(nèi)存。
so:每秒寫(xiě)入交換區(qū)的內(nèi)存大小,由內(nèi)存調(diào)入磁盤(pán)。
對(duì)于內(nèi)存不足問(wèn)題,可以通過(guò)free、ps等命令進(jìn)一步查詢系統(tǒng)及系統(tǒng)內(nèi)進(jìn)程的內(nèi)存占用情況,做進(jìn)一步排查分析。
臨時(shí)可通過(guò)在業(yè)務(wù)空閑期重啟應(yīng)用或者系統(tǒng)釋放內(nèi)存。
如果要從根本上解決內(nèi)存不足的問(wèn)題,需要對(duì)服務(wù)器內(nèi)存進(jìn)行擴(kuò)容,擴(kuò)大內(nèi)存空間。如果不具備擴(kuò)容的條件,可通過(guò)優(yōu)化應(yīng)用程序,以及配置使用大頁(yè)內(nèi)存來(lái)進(jìn)行緩解。
帶寬使用率高問(wèn)題分析
如果是正常業(yè)務(wù)訪問(wèn)以及正常應(yīng)用進(jìn)程導(dǎo)致的帶寬使用率高,需要升級(jí)服務(wù)器的帶寬進(jìn)行解決。如果是非正常訪問(wèn),如某些特定IP的惡意訪問(wèn),或者服務(wù)器遭受到了CC攻擊?;蛘弋惓_M(jìn)程導(dǎo)致的帶寬使用率高??梢酝ㄟ^(guò)流量監(jiān)控工具nethogs來(lái)實(shí)時(shí)監(jiān)測(cè)統(tǒng)計(jì)各進(jìn)程的帶寬使用情況,并進(jìn)行問(wèn)題進(jìn)程的定位。
使用nethogs工具進(jìn)行排查
執(zhí)行以下命令,安裝nethogs工具。
yum install nethogs-y
安裝成功后可以通過(guò)netgos命令查看網(wǎng)絡(luò)帶寬的使用情況。
nethogs命令常用參數(shù)說(shuō)明如下:
-d:設(shè)置刷新的時(shí)間間隔,默認(rèn)為1s。
-t:開(kāi)啟跟蹤模式。
-c:設(shè)置更新次數(shù)。
device:設(shè)置要監(jiān)測(cè)的網(wǎng)卡,默認(rèn)是eth0。
運(yùn)行時(shí)可以輸入以下參數(shù)完成相應(yīng)的操作:
q:退出nethogs工具。
s:按發(fā)送流量大小的順序排列進(jìn)程列表。
r:按接收流量大小的順序排列進(jìn)程列表。
m:切換顯示計(jì)量單位,切換順序依次為KB/s、KB、B、MB。
執(zhí)行以下命令,查看指定的網(wǎng)絡(luò)端口每個(gè)進(jìn)程的網(wǎng)絡(luò)帶寬使用情況。
nethogs eth1
回顯參數(shù)說(shuō)明如下:
PID:進(jìn)程ID。
USER:運(yùn)行該進(jìn)程的用戶。
PROGRAM:進(jìn)程或連接雙方的IP地址和端口,前面是服務(wù)器的IP和端口,后面是客戶端的IP和端口。
DEV:流量要去往的網(wǎng)絡(luò)端口。
SENT:進(jìn)程每秒發(fā)送的數(shù)據(jù)量。
RECEIVED:進(jìn)程每秒接收的數(shù)據(jù)量。
終止惡意程序或者屏蔽惡意訪問(wèn)IP。
如果確認(rèn)大量占用網(wǎng)絡(luò)帶寬的進(jìn)程是惡意進(jìn)程,可以使用kill PID命令終止惡意進(jìn)程。
如果是某個(gè)IP惡意訪問(wèn),可以使用iptables服務(wù)來(lái)對(duì)指定IP地址進(jìn)行處理,如屏蔽IP地址或限速。
使用Web應(yīng)用防火墻防御CC攻擊
若服務(wù)遭受了CC攻擊,請(qǐng)?jiān)赪eb應(yīng)用防火墻控制臺(tái)開(kāi)啟CC安全防護(hù)。Web應(yīng)用防火墻的使用指導(dǎo)請(qǐng)參見(jiàn)配置CC防護(hù)策略。