CPU利用率高演練
CPU利用率是衡量業務系統是否健康的一個重要指標,為使業務達到足夠的穩定性,CPU利用率需保持在合理的範圍內。過高的CPU利用率會導致業務延遲甚至中斷。通過注入高CPU故障,可以測試業務系統在特定CPU負載時的反應、檢測系統復原能力、驗證監控和警示機制的有效性等,並基於演練結果制定應對策略,確保生產環境高CPU利用率時系統能夠迅速恢複正常運行,降低業務中斷風險。
實現原理
本方案使用雲助手外掛程式ecs-fault-highcpu,啟動注入進程AliFaultHighCpu以特定占空比消耗CPU時間片。
使用指南
演練準備
請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態為正常。具體操作,請參見查看雲助手狀態及異常狀態處理。
故障注入
-
使用具有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 2和core 4綁定CPU負載,為空白時對全部vCPU綁定負載。
-
-
查看故障注入是否成功。
-
在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利用率上升,說明故障注入成功。

-
故障恢複
您可以使用以下方式,恢複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>