云服務(wù)器運(yùn)行速度變慢或云服務(wù)器突然出現(xiàn)網(wǎng)絡(luò)斷開(kāi),可能是云服務(wù)器的帶寬和 CPU 利用率過(guò)高導(dǎo)致。恒創(chuàng)科技服務(wù)器控制臺(tái)已內(nèi)置 CPU 和流量監(jiān)控圖供您查看。您可以參考如下步驟排查占用過(guò)高問(wèn)題:
問(wèn)題定位
定位影響云服務(wù)器帶寬和CPU利用率高的進(jìn)程。
Windows 操作系統(tǒng)本身提供較多工具可以定位問(wèn)題,包括任務(wù)管理器、性能監(jiān)視器(Performance Monitor)、資源監(jiān)視器(Resource Monitor)、Process Explorer、Xperf (Windows server 2008 以后)和抓取系統(tǒng) Full Memory Dump檢查。在流量大的情況下,您還可以使用 Wireshark 抓取一段時(shí)間的網(wǎng)絡(luò)包,分析流量使用情況。
問(wè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)題定位
1. 使用 VNC 遠(yuǎn)程登錄云服務(wù)器。
2. 執(zhí)行如下命令查看當(dāng)前系統(tǒng)的運(yùn)行狀態(tài):
top
系統(tǒng)回顯:
3. 查看顯示結(jié)果。
● 命令回顯第一行:10:53:14 up 1 min,1 user, load average: 0.03, 0.01, 0.01 的字段含義如下:系統(tǒng)當(dāng)前時(shí)間為 10:53:14,該云服務(wù)器已運(yùn)行 1 分鐘,當(dāng)前共有 1 個(gè)用戶(hù)登錄, 最近 1 分鐘、最近 5 分鐘和最近15 分鐘的 CPU 平均負(fù)載。
● 命令回顯第三行:CPU 資源總體使用情況。
● 命令回顯第四行:內(nèi)存資源總體使用情況。
● 回顯最下方顯示各進(jìn)程的資源占用情況。說(shuō)明:
● 在 top 頁(yè)面,可以直接輸入小寫(xiě)“q”或者在鍵盤(pán)上按“Ctrl+C”退出。
● 在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:以?xún)?nèi)存占用率大小的順序排列進(jìn)程列表。
○ h:顯示命令幫助。
○ n:設(shè)置在進(jìn)程列表所顯示進(jìn)程的數(shù)量。
4. 通過(guò) /proc/PID/exe 命令可以查看每個(gè)進(jìn)程 ID 對(duì)應(yīng)的程序文件。
問(wèn)題處理
判斷造成 CPU 或帶寬占用率高的進(jìn)程屬于正常進(jìn)程還是異常進(jìn)程,并分類(lèi)進(jìn)行處理。
● 正常進(jìn)程:優(yōu)化程序,或 變更云服務(wù)器規(guī)格。
● 異常進(jìn)程:建議手動(dòng)關(guān)閉進(jìn)程,您也可以借助第三方工具關(guān)閉進(jìn)程。
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)行云服務(wù)器規(guī)格的升級(jí)。
注:kswapd0 是系統(tǒng)的虛擬內(nèi)存管理程序,如果物理內(nèi)存不夠用,系統(tǒng)就會(huì)喚醒 kswapd0 進(jìn)程,由 kswapd0 分配磁盤(pán)交換空間用作緩存,因而占用大量的 CPU 資源。
您可以直接在 top 運(yùn)行界面快速終止相應(yīng)的異常進(jìn)程。操作步驟如下:
1. 在 top 命令運(yùn)行的同時(shí),按下小寫(xiě)的【k】鍵。
2. 輸入要終止進(jìn)程的 PID。進(jìn)程的 PID 為 top 命令回顯的第一列數(shù)值。例如,要終止 PID 為 108 的進(jìn)程,直接輸入【108】后回車(chē)。
3. 操作成功后,會(huì)出現(xiàn)如下圖所示類(lèi)似信息,按回車(chē)確認(rèn)。
kswapd0 進(jìn)程占用導(dǎo)致 CPU 使用率高,可以通過(guò)以下步驟排查進(jìn)程的內(nèi)存占用情況。
1. 通過(guò) top 命令查看 kswapd0 進(jìn)程的資源使用。
2. 如果 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)排查。
3. 通過(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)。
4. 對(duì)于內(nèi)存不足問(wèn)題,可以通過(guò) free、ps 等命令進(jìn)一步查詢(xún)系統(tǒng)及系統(tǒng)內(nèi)進(jìn)程的內(nèi)存占用情況,做進(jìn)一步排查分析。
5. 臨時(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)行排查
1. 執(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。
2. 運(yùn)行時(shí)可以輸入以下參數(shù)完成相應(yīng)的操作:
○ q:退出 nethogs 工具。
○ s:按發(fā)送流量大小的順序排列進(jìn)程列表。
○ r:按接收流量大小的順序排列進(jìn)程列表。
○ m:切換顯示計(jì)量單位,切換順序依次為 KB/s、KB、B、MB。
3. 執(zhí)行以下命令,查看指定的網(wǎng)絡(luò)端口每個(gè)進(jìn)程的網(wǎng)絡(luò)帶寬使用情況:nethogs eth1。
回顯參數(shù)說(shuō)明如下:
○ PID:進(jìn)程 ID。
○ USER:運(yùn)行該進(jìn)程的用戶(hù)。
○ PROGRAM:進(jìn)程或連接雙方的IP地址和端口,前面是服務(wù)器的IP和端口,后面是客戶(hù)端的IP和端口。
○ DEV:流量要去往的網(wǎng)絡(luò)端口。
○ SENT:進(jìn)程每秒發(fā)送的數(shù)據(jù)量。
○ RECEIVED:進(jìn)程每秒接收的數(shù)據(jù)量。
4. 終止惡意程序或者屏蔽惡意訪問(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 地址或限速。
● 若服務(wù)遭受 CC 攻擊,請(qǐng)采取相應(yīng)的 CC 防護(hù)措施。
如果通過(guò)上述排查,云服務(wù)器仍然卡頓,請(qǐng) 提交工單,獲取恒創(chuàng)科技金牌技術(shù)支持。