全部產品
Search
文件中心

:Linux執行個體CPU使用率或負載較高問題的排查與處理

更新時間:Jun 20, 2025

在使用 Linux 執行個體時,如果遇到執行個體運行卡頓或服務響應時間長度較長等問題,可能是 CPU 使用率或負載過高導致,您可以參考本文內容排查並解決問題。

問題現象

使用 Linux 系統的ECS執行個體時,出現如下現象。

  • 系統運行卡頓、服務響應時間長度較長、應用效能下降等問題。

  • 通過ECS控制台查看執行個體 CPU 使用率監控時,發現CPU使用率或者負載過高(參考值:當前CPU 使用率> 80%,可認為CPU使用率過高,當前負載值>0.5,可以認為負載值過高)。

  • 收到CPU使用率或者負載超過設定閾值的警示資訊。

可能原因

CPU最為常見的兩個觀測指標是CPU使用率和CPU負載情況。關於這兩個指標值過高的可能原因如下。

  • CPU使用率過高的常見原因:

    • 異常的進程或服務佔用大量 CPU 資源,導致 CPU 使用率過高。

    • 業務程式及業務情境對執行個體的 CPU 效能要求較高,執行個體的 CPU 效能不足以支撐業務開展所需的 CPU 效能要求。

  • CPU負載過高的常見原因:

    • 單一進程長時間佔用CPU。

    • 磁碟或網路I/O出現瓶頸。

排查步驟

要定位執行個體CPU負載過高的問題,您可以參見下述操作步驟進行問題的排查定位。

使用top命令查看進程的CPU資源使用資訊

top命令是Linux系統中常用的效能分析工具,可以即時顯示系統中各進程的資源佔用情況。

使用介紹

top [-n] [-d] 
說明

[-n]:重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,重新整理操作不會自動停止,您需要按q鍵退出top程式。

[-d] :重新整理時間間隔。

使用樣本

  1. 使用Workbench終端串連登入Linux執行個體(SSH)

  2. 執行如下命令,查看系統中各進程的資源佔用情況,該命令會每2秒統計一次各進程相關資訊,統計5次後退出top命令。

    top -n 5 -d 2

    系統顯示樣本如下。 關於回顯資訊介紹的更多資訊,請參見系統摘要資訊及進程指標監控欄位說明

    top - 17:27:13 up 27 days,  3:13,  1 user,  load average: 0.02, 0.03, 0.05
    Tasks:  94 total,   1 running,  93 sleeping,   0 stopped,   0 zombie
    %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
    KiB Mem:   1016656 total,   946628 used,    70028 free,   169536 buffers
    KiB Swap:        0 total,        0 used,        0 free.   448644 cached Mem
    PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root        20   0   41412   3824   2308 S  0.0  0.4   0:19.01 systemd
    2 root        20   0       0      0      0 S  0.0  0.0   0:00.04 kthreadd
  3. 在top命令的互動模式下,可以通過按鍵與top命令進行互動。關於互動模式的更多資訊,請參見使用top命令的互動模式

    • 通過P鍵,可以對CPU使用率進行倒序排列,方便定位系統中佔用CPU較高的進程。

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

說明
  • 如需查看每個進程ID對應的程式檔案,您可以運行ll /proc/<PID>/exe命令,其中<PID>需替換為實際的程式PID。

  • 如果已查詢出佔用CPU資源較多的非業務進程資訊,需要終止該進程,您可以在top命令的互動模式下結束對應進程,具體操作,請參見通過PID結束對應進程

使用vmstat命令查看系統資源使用資訊

vmstat(Virtual Memory Statistics)是用於報告虛擬記憶體統計資訊的命令,可以使用該命令,從系統維度查看作業系統的虛擬記憶體、進程、CPU等指標資訊。

常用參數說明

vmstat命令的使用格式如下。

vmstat [-n] [delay [count]] 

參數選項

說明

-n

只在開始時顯示一次各欄位名稱。

[delay]

重新整理時間間隔。如果不指定,只顯示一條結果。

[count]

重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,重新整理操作不會自動停止,您需要按Ctrl+C鍵退出vmstat程式。

使用樣本

執行如下命令,使用vmstat每1秒統計一次各進程的CPU使用方式,連續統計4次。

vmstat -n 1 4

返回樣本類似如下。

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 2684984 310452 2364304    0    0     5    17   19   35  4  2 94  0  0
 0  0      0 2687504 310452 2362268    0    0     0   252 1942 4326  5  2 93  0  0
 0  0      0 2687356 310460 2362252    0    0     0    68 1891 4449  3  2 95  0  0
 0  0      0 2687252 310460 2362256    0    0     0     0 1906 4616  4  1 95  0  0

回顯結果主要欄位說明如下。

  • r:表示系統中CPU等待處理的線程。一個CPU每次只能處理一個線程,所以該數值越大,通常表示系統運行越慢。

  • us:使用者模式消耗的CPU時間百分比。該值較高時,說明使用者進程消耗的CPU時間比較多。如果該值長期超過50%,則需要對程式演算法或代碼等進行最佳化。

  • sy:核心模式消耗的CPU時間百分比。

  • wa:I/O等待消耗的CPU時間百分比。該值較高時,說明IO等待比較嚴重,這可能是磁碟大量作隨機訪問造成的,也可能是磁碟效能出現了瓶頸。

  • id:處於空閑狀態的CPU時間百分比。如果該值持續為0,同時sy是us的兩倍,則通常說明系統面臨CPU資源短缺。

處理CPU使用率高的問題

常見CPU佔用較多問題的原因及解決方案如下。

問題現象

原因

解決方案

異常使用者程式或進程長時間佔用大量CPU資源,導致CPU使用率和負載較高。

該程式為異常程式或進程,運行時佔用過多CPU資源。

  • 通過在top工具定位到佔用CPU資源較多的程式的PID,並通過如下方式結束進程。

    警告

    在您結束進程前,請務必確保您瞭解該進程的相關資訊,避免因誤操作導致您的業務中斷。

    • 通過sudo kill -15 <PID>來結束該進程。

    • 在top命令互動模式下結束進程,具體操作,請參見通過PID結束對應進程

  • 如果懷疑進程為惡意程式,您可以對其進行查殺,相關操作,請參見病毒查殺

正常使用者程式或進程長時間佔用大量CPU資源。導致CPU使用率和負載較高。

該程式為正常業務程式或進程,運行時佔用過多CPU資源。

如果執行個體出現CPU效能瓶頸,您可以結合實際情況選擇相應的處理策略。

單個業務程式或進程偶發CPU使用率及負載較高,但期間較短,且發生頻率較低。

業務程式需要最佳化,以解決特殊業務情境(加解密,高並發等)觸發的CPU資源佔用過高問題。

最佳化業務程式。

沒有單個程式或進程佔用大量CPU資源,但整體CPU使用率較高,負載較低。

當前執行個體的服務正常運行所需CPU資源效能大於執行個體的CPU效能。

如果執行個體出現CPU效能瓶頸,您可以選擇升級執行個體規格相關操作,請參見修改執行個體規格

常見問題

CPU使用率較低但負載較高

問題現象

當前Linux系統沒有業務程式運行。通過top命令觀察,發現CPU使用率不高,但是CPU負載(load average)卻非常高,如下圖所示。

image

可能原因

該問題可能是因為殭屍(zombie)進程過多導致。load average是對CPU負載進行評估的,其值越高說明其任務隊列越長,處於等待執行的任務越多。

解決方案

您可以通過ps -axjf命令查看是否存在D+狀態進程,該狀態是指不可中斷的睡眠狀態。

處於該狀態的進程無法終止,也無法自行退出,只能通過恢複其依賴的資源或者重啟系統來解決。

image

kswapd0進程佔用CPU較高

問題現象

ECS執行個體運行卡頓,使用top命令查看,kswapd0進程佔用了99% CPU。

image

可能原因

出現該問題可能是系統此時在持續進行換頁操作,導致佔用大量CPU資源。

kswapd0是虛擬記憶體管理中負責換頁的進程,當ECS執行個體實體記憶體不足時,kswapd0會執行換頁操作,換頁操作會消耗大量的CPU資源。

解決方案

您可以通過修改vm.swappiness核心參數來控制交換空間的大小,來解決kswapd0進程佔用CPU較高的問題。

  1. 使用Workbench終端串連登入Linux執行個體(SSH)

  2. 通過調整swappiness參數解決kswapd0進程佔用CPU較高的問題,具體操作,請參見調整swappiness參數

CPU使用率過高但通過top命令查詢不到異常進程

問題現象

使用ECS執行個體的過程中,如果遇到CPU使用率高達100%等異常情況,且無法通過top、htop等命令查詢到消耗CPU資源的具體進程。

可能原因

該問題可能是系統遭遇電腦病毒或惡意程式攻擊導致。

解決方案

  1. 查看CloudMonitor監控資料。

    1. 登入ECS控制台-執行個體

    2. 在左側導覽列,單擊執行個體ID

    3. 單擊監控頁簽,在作業系統監控頁簽下,查看該主機的CPU使用率並記錄CPU使用率變高的具體時間點。

  2. 查看Linux系統相關的命令修改記錄。

    以下樣本以top命令為例進行示範,實際操作中,您需要替換為實際需要查看的命令,如ps等。

    1. 使用Workbench終端串連登入Linux執行個體(SSH)

    2. 查看命令檔案狀態資訊。

      執行如下命令,查看當前Linux系統命令檔案狀態資訊。

      sudo stat /usr/bin/top

      回顯資訊樣本如下。

        File: /usr/bin/top
        Size: 134864          Blocks: 264        IO Block: 4096   regular file
      Device: 253,3   Inode: 658539      Links: 1
      Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2025-04-15 13:45:41.240874421 +0800
      Modify: 2024-09-26 16:44:05.000000000 +0800
      Change: 2025-04-15 13:45:24.822222315 +0800
       Birth: 2025-04-15 13:45:24.804221600 +0800

      關於回顯資訊中的參數說明如下。

      • Access:檔案最後一次被訪問時間。

      • Modify:檔案內容最後一次被修改的時間。

      • Change:檔案中繼資料被修改的時間。

      • Birth:檔案被建立的時間。

    3. 查看命令軟體包資訊。

      Alibaba Cloud Linux/CentOS/RHEL/Fedora

      1. 查看命令檔案路徑

        sudo which top

        回顯結果樣本如下。

        /usr/bin/top
      2. 查看軟體所屬軟體包

        sudo rpm -qf /usr/bin/top

        回顯結果樣本如下,說明該命令屬於procps-ng軟體包。

        procps-ng-3.3.10-28.el7.x86_64
      3. 通過包管理工具校正軟體包

        sudo rpm -V procps-ng
        • 回顯結果為空白,表明檔案正常。

        • 回顯結果樣本如下,說明檔案有被修改。

          ??5?????? c /etc/sysctl.conf
          • ??5?????? 表示檔案屬性(如許可權、所有者、大小等)與原始安裝記錄不符。

          • c 表示檔案內容被修改。

      Ubuntu/Debian

      1. 查看命令檔案路徑

        sudo which top

        回顯結果樣本如下。

        /usr/bin/top
      2. 查看軟體所屬軟體包

        sudo dpkg -S /usr/bin/top

        回顯結果樣本如下,說明該命令屬於procps軟體包。

        procps: /usr/bin/top
      3. 通過包管理工具校正軟體包

        sudo dpkg -V procps
        • 回顯結果為空白,表明檔案正常。

        • 回顯結果樣本如下,說明檔案有被修改。

          ??5?????? c /etc/sysctl.conf
          • ??5?????? 表示檔案屬性(如許可權、所有者、大小等)與原始安裝記錄不符。

          • c 表示檔案內容被修改。

      說明

      如果您通過上述檢查後,依然懷疑您的命令被惡意程式修改過,您可以選擇使用包管理工具重新安裝該軟體包,具體操作,請參見使用包管理工具管理軟體

  3. 查詢當前執行個體是否串連到異常網域名稱。

    運行如下命令,查看網路介面的串連資訊。

    iftop -i [$Device] -n -P
    說明

    [$Device]請替換為當前系統使用的網卡,如eth0。

    系統顯示類似如下,若您沒有串連過crypto-pool.fr,則crypto-pool.fr是異常網域名稱。

    image

  4. 綜合以上表現,如果在某個時間點之後,您的執行個體出現異常進程佔用CPU資源過高,且執行個體有與異常網域名稱或IP的網路通訊,那麼很有可能您的執行個體遭遇了病毒或是惡意軟體的攻擊,您可以參考如下步驟處理該問題。

    1. 通過快照備份ECS執行個體資料,具體操作,請參見建立快照

    2. 使用遭遇病毒或惡意軟體攻擊之前的有效快照恢複執行個體資料,具體操作,請參見使用快照復原雲端硬碟

    3. 通過Security Center對執行個體進行病毒查殺,提升主機防護能力。更多資訊,請參見主機防護

相關文檔