フォーク:再試行:リソースが一時的に利用できません[クローズ]


80

コンピューターにIntelMPIベンチマークをインストールしようとしましたが、次のエラーが発生しました。

fork: retry: Resource temporarily unavailable

その後、実行lsしてtopコマンドを実行すると、このエラーが再び発生しました。

このエラーの原因は何ですか?

私のマシンの構成:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)

プロセス数を増やす方法については、Linuxのドキュメントを確認してください。
theglauber 2012

2
おそらくこれは役立つだろう: stackoverflow.com/questions/344203/...を
theglauber

回答:


82

これは通常、ファイル記述子が不足していることが原因です。

システムの合計ファイル記述子の制限があります。コマンドから何が得られますか。

sysctl fs.file-nr

これにより、ファイル記述子の数が返されます。

<in_use> <unused_but_allocated> <maximum>

ユーザーのファイル記述子の制限を確認するには、次のコマンドを実行します。

sudo su - <username>
ulimit -Hn

ユーザーが使用しているファイル記述子の数を確認するには、次のコマンドを実行します。

sudo lsof -u <username> 2>/dev/null | wc -l

したがって、システムファイル記述子の制限の問題が発生している場合は、/ etc / sysctl.confファイルを編集して、fs.file-maxの行を追加するか、既存のファイルを変更して、大きな値に設定する必要があります。必要なファイル記述子の数を処理して再起動するのに十分です。

fs.file-max = 204708

15
参考までに、「sysctl -p」を使用して、/ etc /sysctl.confの現在の設定を適用して再起動を保存できます。
EmmEff 2014

2
また、/ etcを読み取り専用にしている場合は、実行時に「sysctl -w fs.file-max = 204708」を使用できます。
オンドレイGalbavý

再起動せずにカーネルに直接追加することもできますが、永続的に追加することはできません 'echo 999999> / proc / sys / fs / file-max'
matson kepson 2018

50

もう1つの可能性は、スレッドが多すぎることです。スレッドプールを使用するアプリに対してテストハーネスを実行しているときに、このエラーメッセージが表示されました。使用しました

watch -n 5 -d "ps -eL <java_pid> | wc -l"

指定されたJavaプロセスID内で実行されているLinuxネイティブスレッドの継続的な数を監視します。これが約1,000に達した後(私たちにとっては--YMMV)、あなたが言及したエラーメッセージが表示され始めました。


2
私がテストしたとき、ps -eLすべてのプロセスps -L <pid>を表示するために働き、に関するプロセスを示すために働きました<pid>ps -eL <pid>に関係なく、すべてのプロセスを表示するだけ<pid>です。
サンヒョンリー2016

1
@Willie Wheelerスレッド制限を克服するために何をしましたか?私は何日もの間、オンラインで見つかった多数のソリューションを検索してテストしてきましたが、役に立ちませんでした。エラーが再開する前に約1時間続くsystemd-logindの再起動を除いて、1,000スレッドを超えるスレッドは許可されません。
ブランドンエリオット

機械には限りある資源があります。制限に達している場合は、使用するスレッドの数を減らす(スレッドプールで制御するなど)か、マシンの数を増やしてください。

Railsサーバーを再起動しました
thedanotto 2016年

2
1000スレッドはそれほど多くはありません
フランクスター2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.