1. 程式人生 > >阿里雲伺服器CPU跑滿或拋高及頻寬跑滿怎樣排查分析原因?(圖文教程)

阿里雲伺服器CPU跑滿或拋高及頻寬跑滿怎樣排查分析原因?(圖文教程)

如果您使用阿里云云伺服器 ECS 時,若出現服務的速度變慢,或 ECS 例項突然斷開,可以考慮伺服器頻寬和 CPU 是否有跑滿或跑高的問題。Linux 系統下,您可以按如下步驟進行排查:

  1. 定位問題。找到影響頻寬和 CPU 跑滿或跑高的具體程序。

  2. 分析處理。排查影響頻寬和 CPU 跑滿或跑高的程序是否正常,並分類進行處理。

    • 對於 正常程序:您需要對程式進行優化或者升級伺服器配置。

    • 對於 異常程序:您可以手動對程序進行查殺,也可以使用第三方安全工具去查殺。

當然,若您預先建立報警任務,當頻寬和 CPU 跑滿或跑高時,系統將自動進行報警提醒。如果雲伺服器 ECS Linux 系統的 CPU 持續跑高,則會對系統穩定性和業務執行造成影響。本文相關配置及說明已在 CentOS 6.5 64 位作業系統中進行過測試。其它型別及版本作業系統配置可能有所差異。

CPU 跑滿或跑高的問題定位

若雲伺服器 ECS 的 CPU 持續跑高,會對系統的穩定性和業務執行造成影響。Linux 系統下,檢視程序的常用命令如下:

  • ps -aux

  • ps -ef

  • top

Linux 系統中,通常使用 top 命令來檢視系統的負載問題,並定位耗用較多 CPU 資源的程序。

操作步驟

  1. 通過控制檯管理終端連線到 ECS 例項,參見使用遠端連線功能連線 ECS 例項。

    說明:資源負載異常時,通常無法通過 SSH 進行遠端連線,建議您通過控制檯管理終端進行連線。

  2. 通過 top 命令檢視系統當前的執行情況。

    針對負載問題,您只需關注回顯的第一行和第三行資訊,詳細說明如下。

    • top 命令的第一行顯示的內容 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05依次為 系統當前時間 、系統到目前為止已執行的時間、當前登入系統的使用者數量、系統負載,這與直接執行 uptime 命令查詢結果一致。

    • top 命令的第三行會顯示當前 CPU 資源的總體使用情況,下方會顯示各個程序的資源佔用情況。

    1. top - 17:27:13 up 27 days,  3:13,  1 user,  load average: 0.02, 0.03, 0.05

    2. Tasks:  94 total,   1 running,  93 sleeping,   0 stopped,   0 zombie

    3. %Cpu(s):  0.3 us,  0.1 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.1 st

    4. KiB Mem:   1016656 total,   946628 used,    70028 free,   169536 buffers

    5. KiB Swap:        0 total,        0 used,        0 free.   448644 cached Mem

    6. PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND

    7. 1 root      20   0   41412   3824   2308 S  0.0  0.4   0:19.01 systemd

    8. 2 root      20   0       0      0      0 S  0.0  0.0   0:00.04 kthreadd

  3. 通過字母鍵 P,可以對 CPU 使用率進行倒序排列,進而定位系統中佔用 CPU 較高的程序。

    說明:通過字母鍵 M, 您可以對系統記憶體使用情況進行排序。如果有多核 CPU,數字鍵 1 可以顯示每核 CPU 的負載狀況。

  4. 通過 ll /proc/PID/exe 可以檢視每個程序 ID 對應的程式檔案。

CPU 跑滿或跑高的分析處理

CPU 的跑滿或跑高,在確認具體的程序結果後,針對異常的程序,您需要通過 top 命令將其終止;而對於 kswapd0 程序導致的記憶體不足等問題,您需要對系統進行規格的升級或程式的優化。

使用 top 直接終止 CPU 消耗較大的程序

您可以直接在 top 執行介面快速終止相應的異常程序。操作步驟如下:

  1. 若您想要終止某個程序,只需按下小寫的 k 鍵。

  2. 輸入想要終止的程序 PID (top 輸出結果的第一列)。例如,若您想要終止 PID 為 86 的程序,輸入 86 後按回車即可。

  3. 操作成功後,介面會出現類似 Send pid 86 signal [15/sigterm] 的提示資訊。按回車確認即可。

kswapd0 程序佔用導致 CPU 較高

作業系統都用分頁機制來管理實體記憶體,系統會把一部分硬碟空間虛擬成記憶體使用。由於記憶體的速度要比磁碟快得多,所以系統要按照某種換頁機制將不需要的頁面換到磁碟中,將需要的頁面調到記憶體中。

kswapd0 是虛擬記憶體管理中負責換頁的程序,當伺服器記憶體不足的時候 kswapd0 會執行換頁操作,這個換頁操作是十分消耗主機 CPU 資源的。操作步驟如下:

  1. 通過 top 命令檢視 kswapd0 程序。

  2. 檢查該程序是否持續處於非睡眠狀態,且執行時間較長。若是,可以初步判定系統在持續地進行換頁操作,kswapd0 程序佔用了系統大量 CPU 資源。

    1

  3. 您可以通過 free 、ps 等指令進一步查詢系統及系統內程序的記憶體佔用情況,做進一步排查分析。

  4. 針對系統當前記憶體不足的問題,您可以重啟 Apache,釋放記憶體。

    說明:從長遠的角度來看,您需要對記憶體進行升級。

頻寬跑滿或跑高的分析處理

對於正常程序導致的頻寬跑滿或跑高的問題,需要對伺服器的頻寬進行升級。對於異常程序,有可能是由於惡意程式問題,或者是部分 IP 惡意訪問導致,也可能是服務遭到了 CC 攻擊。

通常情況下,您可以使用 iftop 工具或 nethogs 檢視流量的佔用情況,進而定位到具體的程序。

使用 iftop 工具排查

  1. 在伺服器內部安裝 iftop 流量監控工具。

    2

    1. yum install iftop -y

  2. 伺服器外網頻寬被佔滿時,如果通過遠端無法登陸,可通過阿里雲終端管理進入到伺服器內部,執行下面命令檢視流量佔用情況:

    注意:-P 引數將會顯示請求埠。執行 iftop -i eth0 -P 命令,可以檢視通過伺服器哪個埠建立的連線,以及內網流量。舉例如下:

    3

    在上圖中,您可以檢視到流量高耗的是伺服器上 53139 埠和 115.205.150.235 地址建立的連線。

    1. iftop -i eth1 -P

  3. 執行 netstat 命令反查 53139 埠對應的程序。

    4

    1. netstat -tunlp |grep 53139

  4. 經反查,伺服器上 vsftpd 服務產生大量流量,您可以通過停止服務或使用 iptables 服務來對指定地址進行處理,如遮蔽 IP 地址或限速,以保證伺服器頻寬能夠正常使用。

使用 nethogs 進行排查

  1. 在伺服器內部安裝 nethogs 流量監控工具。

    1. yum install nethogs -y

  2. 通過 nethogs 工具來檢視網絡卡上程序級的流量資訊,若未安裝可以通過 yum、apt-get 等方式安裝。舉例如下:

    1. 若 eth1 網絡卡跑滿,執行命令 nethogs eth1

    2. 檢視每個程序的網路頻寬情況以及程序對應的 PID。

    3. 確定導致頻寬跑滿或跑高的具體程序。

      5

  3. 若程序確定是惡意程式,可以通過執行 kill -TERM <PID> 來終止程式。

    說明: 如果是 Web 服務程式,您可以使用 iftop 等工具來查詢具體 IP 來源,然後分析 Web 訪問日誌是否為正常流量。日誌分析可以使用 logwatch 或 awstats 等工具進行。

使用 Web 應用防火牆防禦 CC 攻擊

若您的服務遭受了 CC 攻擊,請在 Web 應用防火牆控制檯儘快開啟 CC 安全防護。

  1. 登入 Web應用防火牆 控制檯。

  2. 在 CC 安全防護中,啟動狀態按鈕,並在模式中選擇 正常。

    6

--------------------- 本文來自 tianjinsong 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/bluetjs/article/details/82753149?utm_source=copy