PID资源不足演练

在操作系统中,PID(Process Identifier)是用于唯一标识进程的数字,可以在进程释放后被重复利用。虽然很难将PID资源耗尽,但仍存在意外耗尽的情况,导致新进程无法创建,可能会导致业务挂起,从而影响业务能力。因此,有必要模拟PID资源耗尽或主动模拟业务挂起的情况,以检测业务的高可用能力。

实现原理

本方案使用云助手插件ACS-ECS-TaskLimit,使用fork()方法创建进程,直至达到操作系统的pid_maxthreads-max中的较小值,从而阻塞新进程/线程的创建。

使用指南

演练准备

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

故障注入

  1. 登录ECS实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

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

    重要

    ACS-ECS-TaskLimit插件不影响已经存在的业务进程,仅影响新业务进程的创建。

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

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

    image

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

    故障注入后,无法创建新的业务进程,创建新的业务进程都会提示-bash: fork: retry: Resource temporarily unavailable

    image

故障恢复

您可以使用以下方式,移除注入的故障。

  • 方法一(推荐):重启实例,具体操作,请参见重启实例

  • 方法二:如能正常执行命令,执行以下恢复命令。

    重要

    该指令可能由于系统阻塞而导致执行失败。

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