PID資源不足演練
更新時間:
Copy as MD
在作業系統中,PID(Process Identifier)是用於唯一標識進程的數字,可以在進程釋放後被重複利用。雖然很難將PID資源耗盡,但仍存在意外耗盡的情況,導致新進程無法建立,可能會導致業務掛起,從而影響業務能力。因此,有必要類比PID資源耗盡或主動類比業務掛起的情況,以檢測業務的高可用能力。
實現原理
本方案使用雲助手外掛程式ACS-ECS-TaskLimit,使用fork()方法建立進程,直至達到作業系統的pid_max或threads-max中的較小值,從而阻塞新進程/線程的建立。
使用指南
演練準備
請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態為正常。具體操作,請參見查看雲助手狀態及異常狀態處理。
故障注入
-
登入ECS執行個體。
具體操作,請參見使用Workbench登入Linux執行個體。
-
使用具有sudo存取權限的使用者,運行雲助手外掛程式
ACS-ECS-TaskLimit。重要ACS-ECS-TaskLimit外掛程式不影響已經存在的業務進程,僅影響新業務進程的建立。sudo acs-plugin-manager --exec --plugin ACS-ECS-TaskLimit --params inject顯示如下內容時,說明雲助手外掛程式
ACS-ECS-TaskLimit已啟動。[ecs-user@iZ2zeioa ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-TaskLimit --params inject Done Will create 28201 tasks to limit [ecs-user@iZ2zeioazolicrtw3ow42bZ ~]$ created 22548 threads in child -
查看故障注入是否成功。
故障注入後,無法建立新的業務進程,建立新的業務進程都會提示
-bash: fork: retry: Resource temporarily unavailable。[ecs-user@iZ2zeioazoli ~]$ sudo systemctl restart sysstat.service -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: Resource temporarily unavailable
故障恢複
您可以使用以下方式,移除注入的故障。
-
方法一(推薦):重啟執行個體,具體操作,請參見重啟執行個體。
-
方法二:如能正常執行命令,執行以下恢複命令。
重要該指令可能由於系統阻塞而導致執行失敗。
sudo acs-plugin-manager --exec --plugin ACS-ECS-TaskLimit --params recover
该文章对您有帮助吗?