系统负载高演练

更新时间:
复制 MD 格式

系统负载load是衡量系统工作量的一个指标,具体的表示为:在特定时间间隔内,系统处于可运行状态和不可中断状态的平均进程数。监控负载load是一个重要指标,可以判断当前业务的负载情况,用于及时告警并做出应对措施。

实现原理

本方案使用云助手插件ACS-ECS-HighLoad,通过vfork命令创建出预期数量的进程,以达到目标的load值,每个进程创建后执行sleep动作,直至超时退出。因此该场景对系统业务影响较小。

使用指南

演练准备

请确保您的ECS实例已安装云助手Agent,并且云助手状态正常。具体操作,请参见查看云助手状态及异常状态处理

故障注入

  1. 登录ECS实例。

    具体操作,请参见使用Workbench登录Linux实例

  2. 使用具有sudo访问权限的用户,运行云助手插件ACS-ECS-HighLoad

    sudo acs-plugin-manager --exec --plugin ACS-ECS-HighLoad --params inject,[num-processes=paramA],[duration=paramB]

    []内为可选故障注入参数,参数说明:

    • num-processes(可选):需要创建的进程数量,该值略会近似预期达到的最大load值,默认100。

    • duration(可选):持续时间,默认为300s。

    显示如下所示时,说明云助手插件ACS-ECS-HighLoad已启动。

    [ecs-user@iZ2zeioazol          ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-HighLoad --params inject
    max load: 100, duration: 300
    Done
  3. 查看故障注入是否成功。

    • 使用top命令,分别检查1分钟、5分钟、15分钟系统负载的指标。

    • 在云监控中检查系统负载曲线。

故障恢复

  • 方法一(推荐):等待超时自动恢复。

  • 方法二:在ECS实例中执行故障恢复命令。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-HighLoad --params recover

演练示例

  1. 故障注入

    sudo acs-plugin-manager --exec --plugin ACS-ECS-HighLoad --params inject

    返回如下所示,表示注入成功,

    [ecs-user@iZ2zeioazol          ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-HighLoad --params inject
    max load: 100, duration: 300
    Done
  2. 查看注入效果。

    • 使用top命令中查看系统负载,如下所示,1 min98.33,5 min58.24,15 min32.66。

      top - 15:29:13 up 23 min,  2 users,  load average: 98.33, 58.24, 32.66
      Tasks: 304 total,   1 running, 303 sleeping,   0 stopped,   0 zombie
      %Cpu(s):  0.3 us,  0.2 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
      MiB Mem :  3565.9 total,   2882.5 free,    164.9 used,    518.6 buff/cache
      MiB Swap:    0.0 total,      0.0 free,      0.0 used.   3182.1 avail Mem
      
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
       1553 root      20   0  123424  21896  15428 S   0.3   0.6   0:08.32 AliYunDunMonito
          1 root      20   0  103536  11500   8620 S   0.0   0.3   0:01.21 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-events_highpri
          7 root      20   0       0      0      0 I   0.0   0.0   0:00.01 kworker/u4:0-events_unbound
          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_
         10 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
         11 root      20   0       0      0      0 S   0.0   0.0   0:00.01 ksoftirqd/0
         12 root      20   0       0      0      0 I   0.0   0.0   0:00.13 rcu_sched
         13 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0
         14 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
         15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1
         16 root      rt   0       0      0      0 S   0.0   0.0   0:00.05 migration/1
         17 root      20   0       0      0      0 S   0.0   0.0   0:00.02 ksoftirqd/1
         19 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/1:0H-kblockd
         21 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kdevtmpfs
    • 在云监控控制台查看平均负载。

      image

  3. 等待故障恢复。

    • 等待超时,系统负载会慢慢恢复。如下所示,1 min的负载已经低于5 min的负载,说明已经在恢复中。

      top - 15:34:05 up 28 min,  2 users,  load average: 1.96, 29.71, 28.35
      Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
      %Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
      MiB Mem :  3565.9 total,  2903.1 free,   146.8 used,   516.0 buff/cache
      MiB Swap:    0.0 total,    0.0 free,    0.0 used.  3201.6 avail Mem
      
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
        894 root      20   0 1467820  29548  22404 S   0.3   0.8   0:06.64 argusagent
       1542 root      20   0   90492  17980  11840 S   0.3   0.5   0:05.73 AliYunDun
       1553 root      20   0  123424  21896  15428 S   0.3   0.6   0:09.41 AliYunDunMonito
          1 root      20   0  103536  11500   8620 S   0.0   0.3   0:01.22 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-events_highpri
          7 root      20   0       0      0      0 I   0.0   0.0   0:00.02 kworker/u4:0-events_unbound
          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_
         10 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
         11 root      20   0       0      0      0 S   0.0   0.0   0:00.01 ksoftirqd/0
         12 root      20   0       0      0      0 I   0.0   0.0   0:00.15 rcu_sched
         13 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0
         14 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
         15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1
         16 root      rt   0       0      0      0 S   0.0   0.0   0:00.05 migration/1
    • 执行故障恢复命令。

      sudo acs-plugin-manager --exec --plugin ACS-ECS-HighLoad --params recover