全部產品
Search
文件中心

Alibaba Cloud Linux:Alibaba Cloud Linux 2系統的ECS執行個體建立大量進程失敗,如何處理?

更新時間:Apr 29, 2025

本文為您介紹Alibaba Cloud Linux 2系統的ECS執行個體建立大量進程失敗的原因及解決方案。

問題描述

Alibaba Cloud Linux 2系統的ECS執行個體中執行系統調用(fork/clone)時,進程建立失敗,返回“-1 EAGAIN (Resource temporarily unavailable)”錯誤。一般有如下兩種情境:

  • 情境一:通過Shell命令互動時,系統返回“bash: fork: retry: No child processes”錯誤。

  • 情境二:部分應用內建立進程或者線程失敗,同時在系統的其他應用中卻可以建立成功。

問題原因

在不同的情境中,問題的原因各不相同。請根據現場的實際情況,匹配相應的情境:

  • 情境一:系統使用者建立的線程數達到最大值。執行ulimit -u命令可查看線程最大值。

  • 情境二:部分應用的運行使用者所建立的進程數(nr_user_process)超過了應用的進程數限制(app_limit),引發報錯。

解決方案

調整系統使用者可建立的最大線程數

  1. 系統日誌中查看所有進程建立失敗的應用。

  2. 執行以下命令,強制關閉佔用線程數較多的應用。

    警告

    kill命令屬於風險操作,建議在執行前為ECS執行個體建立快照或備份重要檔案,以確保資料安全。

    <PID>需替換為佔用線程數較多的進程PID。

    kill -9 <PID>
  3. 執行以下命令,調整系統使用者可建立的最大線程數。

    <$Num_Of_Process>替換為調整後的最大線程值,根據實際需求合理規劃ulimit資源。

    ulimit -u <$Num_Of_Process>

調整某個進程的limit資源

  1. (可選)若未安裝util-linux工具,請執行以下命令安裝。

    sudo yum install -y util-linux
  2. 執行以下命令,調整進程的limit資源。

    <$PID>需替換為進程或線程建立失敗的進程PID。

    prlimit --pid <$PID> --nproc=unlimited