
私のサーバーに接続すると、次の結果が表示されます。
-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
また、次のコマンドを実行してみましたが、結果は同じでした。
-bash-4.1$ df -h
-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
-bash-4.1$
-bash-4.1$ ls -lrth
-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: Interrupted system call
-bash-4.1$
-bash-4.1$ ps -aef | grep `pwd`
-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
-bash-4.1$
なぜ来るの?どうすれば解決できますか?
答え1
これは、サーバー自体(またはユーザーアカウント固有)の一部のリソース制限が原因である可能性があります。シェルの制限を確認できますulimit -a
。 Espは、ulimit -u
最大ユーザープロセス数を確認します。最大プロセス数に達すると、フォークは新しいプロセスを作成できず、このエラーで失敗します。これは、スワップ/メモリリソースの問題によるものかもしれません。
答え2
フォーク:リソースを一時的に使用できません。
このエラーは、現在のシェルリソースが制限されていることを示します(制限の確認ulimit -a
)。したがって、他のシェルでリソースを増やすか、ulimit
シェルで使用できるリソースとオペレーティングシステムで生成されるプロセスを制御するコマンドを使用してリソースを増やすことができます。
制限を増やすには、以下を実行してください。
ulimit -Sn unlimited && ulimit -Sl unlimited
ソフト制限をハード制限に増やすか、次の操作を行います。
ulimit -l unlimited
ulimit -n 10240
プロセスの最大サイズを無制限に設定し、開いたファイルの最大数を10240に設定します。
詳細については、以下を参照してくださいhelp ulimit
。
これを継続的に作成するには、上記の設定をスタートアッププログラムに追加してください。RCファイル(例~/.bashrc
:)。
以下を使用してカーネル制限を増やすこともできます/etc/sysctl.conf
(manを参照)。sysctl.conf
kern.maxprocperuid=1000
kern.maxproc=2000
答え3
dmesg
あなたの友達です。このコマンドを実行して、システムが何かをブロックする理由を確認してください。
systemdベースのシステムでは、ユーザー制限もあります。次のコマンドを使用して制限を確認できます。
systemctl status user-1000.slice
systemctl cat user-1000.slice
1000は、担当ユーザ、すなわちログインしたいユーザのPIDである。
詳しくは、次のページをご覧ください。ここでは、特定のユーザーまたはすべてのユーザーの制限を変更または変更する方法を学ぶことができます。
答え4
この問題は、次のコマンドを使用して解決することもできます。
yum install psmisc
killall -STOP -u user1
killall -KILL -u user1
ここで、user1 は制限を超えたユーザーのグループです。