CPU利用率高演練

更新時間:
Copy as MD

CPU利用率是衡量業務系統是否健康的一個重要指標,為使業務達到足夠的穩定性,CPU利用率需保持在合理的範圍內。過高的CPU利用率會導致業務延遲甚至中斷。通過注入高CPU故障,可以測試業務系統在特定CPU負載時的反應、檢測系統復原能力、驗證監控和警示機制的有效性等,並基於演練結果制定應對策略,確保生產環境高CPU利用率時系統能夠迅速恢複正常運行,降低業務中斷風險。

實現原理

本方案使用雲助手外掛程式ecs-fault-highcpu,啟動注入進程AliFaultHighCpu以特定占空比消耗CPU時間片。

使用指南

演練準備

請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態正常。具體操作,請參見查看雲助手狀態及異常狀態處理

故障注入

  1. 使用具有sudo存取權限的使用者,運行雲助手外掛程式ecs-fault-highcpu

    sudo acs-plugin-manager --exec --plugin ecs-fault-highcpu --params inject,[cpu-percent=paramA],[cpu-list=paramB]

    []內為可選故障注入參數,參數說明:

    • cpu-percent(可選):要達到的CPU利用率,為空白時預設100。

      說明

      cpu-percent為注入進程的CPU利用率,總CPU利用率還會受到其他進程的影響。

    • cpu-list(可選):用於對特定vCPU綁定負載,如cpu-list=0-2/4表示對core 0、core 1、core 2core 4綁定CPU負載,為空白時對全部vCPU綁定負載。

  2. 查看故障注入是否成功。

    • ECS執行個體中,執行top命令,CPU利用率上升,說明故障注入成功。其中核心態(sy)和使用者態(us)之和約等於設定的CPU利用率。

      top - 17:54:43 up 56 min,  1 user,  load average: 2.75, 3.07, 2.79
      Tasks: 110 total,   3 running, 106 sleeping,   0 stopped,   1 zombie
      %Cpu(s): 46.9 us, 51.7 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.8 hi,  0.5 si,  0.0 st
      MiB Mem :   3566.0 total,   2432.8 free,    226.1 used,    907.1 buff/cache
      MiB Swap:      0.0 total,      0.0 free,      0.0 used.   3114.8 avail Mem
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
       2269 root      20   0  222124   3304   2992 R  10.3   0.1   3:46.48 AliFaultHighCpu
       2099 root      20   0  222124   3288   2976 S   9.7   0.1   3:45.34 AliFaultHighCpu
       1849 root      10 -10  138968  40156  16872 S   9.0   1.1   3:34.35 AliYunDunMonito
        749 root      20   0  474984  29068  13556 S   0.3   0.8   0:06.57 tuned
        778 root      20   0 1798724  39300  20744 S   0.3   1.1   0:01.46 containerd
       1838 root      20 -10   88356  17364   1200 S   0.3   0.5   0:12.94 AliYunDun
          1 root      20   0  103420  11464   8640 S   0.0   0.3   0:01.36 systemd
          2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
    • CloudMonitor監控圖表中,注入後CPU利用率上升,說明故障注入成功。

      image

故障恢複

您可以使用以下方式,恢複ECS執行個體狀態。

  • 方法一(推薦):在ECS執行個體中執行故障恢複命令,查看CPU利用率是否下降到故障注入前的水平。

    sudo acs-plugin-manager --exec --plugin ecs-fault-highcpu --params recover

    如下所示,CPU利用率已下降到故障注入前的水平,系統已恢複正常。

    top - 17:03:18 up 30 min,  1 user,  load average: 0.06, 0.01, 0.00
    Tasks: 109 total,   1 running, 108 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.5 us,  0.2 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
    MiB Mem :   3565.9 total,   2918.7 free,    148.9 used,    498.3 buff/cache
    MiB Swap:      0.0 total,      0.0 free,      0.0 used.   3200.3 avail Mem
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     1546 root      10 -10  121036  22296  16412 S   0.7   0.6   0:06.96 AliYunDunMonito
      753 root      20   0   43200   7632   6152 S   0.3   0.2   0:00.80 AliYunDunUpdate
     1008 root      20   0  689936  20344  13780 S   0.3   0.6   0:02.37 aliyun-service
     1535 root      10 -10   88300  17472  11296 S   0.3   0.5   0:04.14 AliYunDun
        1 root      20   0  103332  11164   8480 S   0.0   0.3   0:00.97 systemd
        2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
        3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
        4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
        6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd
        7 root      20   0       0      0      0 I   0.0   0.0   0:00.00 kworker/u4:0-ext4-rsv-conversion
        8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
        9 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_
  • 方法二:自行終止名為AliFaultHighCpu的進程。

    為不影響後續重複對該情境故障注入,終止AliFaultHighCpu進程後,再次執行方法一的故障恢複命令。

    sudo kill <AliFaultHighCpu PID>