このトピックでは、Alibaba Cloud Linux 2 を実行している Elastic Compute Service (ECS) インスタンスで多数のプロセスを作成できない問題の原因と解決策について説明します。
問題の説明
Alibaba Cloud Linux 2 インスタンスで fork または clone システムコールを実行すると、インスタンスでプロセスを作成できず、「-1 EAGAIN (Resource temporarily unavailable)
」エラーメッセージが表示されます。この問題は、通常、次のいずれかのシナリオで発生します。
シナリオ 1:インスタンスでシェルコマンドを実行すると、「
bash: fork: retry: No child processes
」エラーメッセージが表示されます。シナリオ 2:特定のアプリケーションの プロセス または スレッド を作成できませんが、他のアプリケーションの プロセス または スレッド は作成できます。
原因
前述の問題は、次の理由で発生する可能性があります。
原因 1:システムユーザーが作成できるスレッドの最大数に達しました。
ulimit -u
コマンドを実行して、システムユーザーが作成できるスレッドの最大数をクエリできます。原因 2:特定のアプリケーションに対してランタイムユーザーが作成したプロセス数 (nr_user_process) が、アプリケーション固有の上限 (app_limit) を超えています。
解決策
システムユーザーが作成できるスレッドの最大数を変更する
プロセスを作成できないアプリケーションを表示します。
次のコマンドを実行して、多数のスレッドを占有しているアプリケーションを強制終了します。
警告kill
コマンドはリスクを引き起こす可能性があります。kill コマンドを実行する前に、データセキュリティを確保するために、インスタンスのスナップショットを作成するか、インスタンスの重要なファイルをバックアップすることをお勧めします。<PID>
を、終了するアプリケーションのプロセス ID (PID) に置き換えます。kill -9 <PID>
次のコマンドを実行して、システムユーザーが作成できるスレッドの最大数を変更します。
ulimit -u <$Num_Of_Process>
プロセスのリソース制限を変更する
(オプション) インスタンスに
util-linux
パッケージがインストールされていない場合は、次のコマンドを実行してインストールします。yum install -y util-linux
プロセスのリソース制限を変更します。
<$PID>
を PID に置き換えます。prlimit --pid <$PID> --nproc=unlimited