問題の説明
Linux Elastic Compute service (ECS) インスタンスでサービスプロセスを開始すると、次の図に示すように、
task: Cannot allocate memoryエラーメッセージが表示されます。
原因
この問題は、同時に実行できるシステムプロセスの最大数を超えたために発生する可能性があります。
Linuxカーネルでは、
kernel.pid_maxパラメーターは、同時に実行できるプロセスの最大数を指定します。 オペレーティングシステムで実行されているプロセスの数がkernel.pid_maxパラメーターの値を超えると、オペレーティングシステムは新しいプロセスを作成できず、task: cannot allocate memoryというエラーメッセージが表示されます。 説明 オペレーティングシステムで同時に実行されているプロセスの数が
kernel.pid_maxパラメーターの値の3分の2を超える場合は、kernel.pid_maxパラメーターの値を大きくして、他のサービスを期待どおりに実行できるようにすることを推奨します。 解決策
ビジネス要件に基づいて
kernel.pid_maxパラメーターの値を増やすには、次の手順を実行します。 説明 64ビットオペレーティングシステムの場合、
kernel.pid_maxパラメーターの最大値は2 22です。 32ビットオペレーティングシステムの場合、kernel.pid_maxパラメーターの最大値は32,768です。 - Linux ECSインスタンスに接続します。 詳細については、「接続方法の概要」をご参照ください。
- オペレーティングシステムで実行されているプロセスの数が最大許容数を超えているかどうかを確認します。
- 次のコマンドを実行して、オペレーティングシステムで実行されているプロセスの数を表示します。
ps -eLf | wc -l - 次のコマンドを実行して、オペレーティングシステムで同時に実行できるプロセスの最大数を表示します。
sysctl kernel.pid_max
オペレーティングシステムで実行されているプロセスの数が最大数を超えている場合は、ステップ3に進みます。
- 次のコマンドを実行して、オペレーティングシステムで実行されているプロセスの数を表示します。
- 次のいずれかのコマンドを実行して、
kernel.pid_maxパラメーターの値を増やします。 コマンドで、XXXXを新しい値に置き換えます。- 次のいずれかのコマンドを実行して、kernel.pid_maxパラメーターの値を一時的に増やします。 Linux ECSインスタンスが再起動されると、kernel.pid_maxパラメーターは自動的に元の値に設定されます。
sysctl -wカーネル. pid_max=XXXXエコーXXXX> /proc/sys/kernel/pid_max
- 次のコマンドを実行して、kernel.pid_maxパラメーターの値を永続的に増やします。 新しい値は、インスタンスのステータスに関係なく有効です。
echo "kernel.pid_max=XXXX" >> /etc/sysctl.conf sysctl -p
kernel.pid_maxパラメーターの値を変更すると、新しい値がすぐに有効になります。 - 次のいずれかのコマンドを実行して、kernel.pid_maxパラメーターの値を一時的に増やします。 Linux ECSインスタンスが再起動されると、kernel.pid_maxパラメーターは自動的に元の値に設定されます。