MacOS システムが React フロントエンド プロジェクトを開始し、エラーを報告します エラー: EMFILE: 開いているファイルが多すぎます、開いているソリューション

エラーシナリオ

最近、React のフロントエンド マイクロ アプリケーションを開発していました。モジュールの起動時に、モジュールのビルド時にエラーが報告されました。モジュールのビルドに失敗しました。エラー: EMFILE: 開いているファイルが多すぎます。

以下に示すように: 

エラー: EMFILE: 開いているファイルが多すぎるエラーは、調査の結果、単一のマイクロアプリ プロジェクトが大きく、リリースプロセスが Mac のデフォルトのファイル監視制限を超えているためです。通常、このタイプのエラーの理由は、Linux または MacOS のファイル ハンドルの数が十分でないことです。

解決

解決策も比較的単純で、ファイルの最大サイズ制限を変更するだけです。これは一時的な変更であり、一定時間が経過するとデフォルトのサイズに戻ることに注意してください永続的な変更は設定ファイルを変更する必要がありますが、一時的な変更でも対応できるため、設定ファイルは変更しません。

ulimitコマンドのデフォルトプログラムであるlaunchdを変更します。 

まずターミナルを開き、launchctl limit と入力して Enter を押すと、次の図が表示されます。 

launchctl limit

 

 sudo launchctl limit maxfiles 5000000 5000000 を再度入力して Enter を押します。ここでパスワードの入力を求められます。

sudo launchctl limit maxfiles 5000000 5000000

上限を大きい値に変更してパスワードを入力してください

再度見ると値が変更されている 

 普通にやり直す

 拡張された知識:

1. 開いているファイルが多すぎるのに EMFILE が表示されるのはなぜですか?

ファイル システムに対して多数の同時呼び出しが行われると、オペレーティング システムのファイル記述子の数が瞬時に使い果たされ、開いているファイルが多すぎる EMFILE がスローされます。

非同期 I/O と同期 I/O の大きな違い: 同期 I/O は、各 I/O が互いにブロックされているため、ループ本体内で常に次々に呼び出され、過剰な消費が発生しません。ファイル記述子 多くの場合、パフォーマンスも低くなります。

非同期 I/O の場合、同時実行の実装は簡単ですが、基礎となるシステムのパフォーマンスが過度に圧迫されるのを防ぐために、一定の過負荷保護を与える必要があります。

2. 開いているファイルが多すぎるということは、Linux および MacOS システムでよく見られるエラーです. 文字通り、プログラムによって開かれたファイルの数が多すぎることを意味しますが、ここでのファイルはファイルという意味だけでなく、開いている通信リンクも意味します(ソケットなど)、リッスンされているポートなど、ハンドル (ハンドル) と呼ばれることもあります。このエラーは通常、ハンドルの数がシステムの制限を超えていると呼ばれます。その理由は、プロセスが特定の時点でシステム制限を超える量のファイルと通信リンクを開いたためです。

ここでのファイルとは、正確にはファイルハンドル(ファイルハンドル)のことです。このエラーが発生するケースのほとんどは、ファイルハンドル(ファイルハンドル)がリークしている場合です。平たく言えば、ファイルハンドルは常にオープンされているが、その後オープンされていない状態です。通常のシャットダウンでは、開いているファイルの数が常に増加します。

ファイルハンドルのリークは、単にファイルを開くだけでなくさまざまな理由で発生します。一般的なソースには、ソケット、パイプ、データベース接続、ファイルなどがあります。通常の状況では、サーバー自体がこのエラーを突然報告することはありません。クラウド サーバー上に展開した業務プログラムがあまりにも多くのファイルを開いて閉じていないことが原因であると考えられます。その結果、同時に開いているファイルの数が減少しました。時間がシステム制限を超えています:

1 つの状況として、プログラム自体が大量のファイル ハンドルを開く必要がある場合があり、この場合、開いているファイルの数がシステム自体のオープン ファイル数の制限を超えています。上記の具体的な方法と同様に、システムの制限を適用します。

もう 1 つの状況は、ファイル ハンドルの使用後にプログラムが正常に閉じないことです。通常、ネットワーク接続が閉じられなかったり、ファイルが閉じられなかったりします。このとき、プログラムのバグを修正して、次のことを確認する必要があります。開いたファイルは両方とも最終的に閉じられ、ネットワーク接続も閉じられます。



参考文献

1. Nodejs のエラー: EMFILE、開いているファイルが多すぎます solution_keepupblw のブログ - CSDN ブログ

2. Linux ファイル ハンドルの数が十分ではありません エラー: EMFILE: 開いているファイルが多すぎます_Viogs のブログ-CSDN ブログ

3. 「開いているファイルが多すぎる」原理と解決策_Foxconn 品質検査官 Zhang Quandan のブログ - CSDN ブログ

4. mac OSX_maclimits.conf_Jiangpan Dubu Blog-CSDN Blogでulimitパラメータを変更する

おすすめ

転載: blog.csdn.net/qq_35624642/article/details/127229318