Linuxベースのシステムでは、 RELIANOID アプライアンスでは、ネットワーク接続、ソケット、開いているファイルごとに ファイル記述子オペレーティング システムは、リソースの枯渇を防ぐために、同時に開くことができるファイル記述子の数に制限を設けています。
プロセスがファイル記述子の制限に達すると、追加のファイルやソケットを開くことができなくなり、システムによって次のエラーが生成される場合があります。
開いているファイルが多すぎます
この状態はシステムの機能に影響を及ぼし、影響を受けるプロセスまたはシステムが再起動されるまで、サービスが応答を停止したり、新しい接続を確立できなかったりする可能性があります。
この記事では、ファイル記述子の制限がどのように機能するかについて説明します。 RELIANOID システムと、管理者が必要に応じてシステムを調整する方法について説明します。
ファイル記述子の制限の仕組み #
Linux は、主に次の 2 種類の制限を通じてファイル記述子を管理します。
- システム全体の制限
- プロセスごとの制限
安定した動作を確保するには、両方を適切に構成する必要があります。
システム全体のファイル記述子の制限 #
Linuxカーネルは、システム全体に割り当てられるファイル記述子の数にグローバル制限を設けています。この値はカーネルパラメータによって制御されます。 fs.file-max
現在の値を表示するには、以下を使用します。
sysctl fs.file-max
出力例
fs.file-max = 1000000
つまり、システムは合計で最大100万個のファイル記述子を割り当てることができます。この制限に達した場合、既存のファイルハンドルが解放されるまで、新しいファイルハンドルを作成することはできません。
必要に応じて、管理者は以下を使用して一時的に値を増やすことができます。
sysctl -w fs.file-max=2000000
再起動後も変更を永続化するには、次のパラメータを追加します。 /etc/sysctl.conf
例:
fs.file-max = 2000000
次のように構成を適用します。
sysctl -p
プロセスごとのファイル記述子の制限 #
グローバルシステム制限に加えて、各プロセスにはオープンできるファイル数の制限があります。この制限は、 ulimit.
現在の制限は次のように確認できます。
ulimit -n
出力例
100000
これは、1 つのプロセスで最大 100,000 個のファイル記述子を開くことができることを示しています。
プロセスがこの制限に達すると、 「開いているファイルが多すぎます」 システム全体の制限がまだ利用可能であっても、エラーが発生します。
ファイル記述子の制限 RELIANOID #
RELIANOID サービスは、次の構成ファイルからプロセスごとのファイル記述子の制限を読み込みます。
/etc/profile/relianoid.sh
これにより、 RELIANOID コンポーネントは、多数のネットワーク接続を処理するために必要な制限内で実行されます。
しかしながら、 同じシステム上で実行されているサードパーティのプロセスは、これらの制限を自動的に継承しない可能性があります。したがって、監視エージェント、外部ツール、またはカスタム サービスの制限が必要な値よりも低い場合、ファイル記述子の枯渇が発生する可能性があります。
サードパーティプロセスの制限の調整 #
サードパーティ アプリケーションでより高いファイル記述子の制限が必要な場合は、次のように設定できます。 /etc/security/limits.conf
具体的な例を挙げますと、以下の通りです。
* ソフト nofile 200000 * ハード nofile 200000
この構成により、すべてのユーザーが開くことができるファイルの数が増加します。
あるいは、特定のユーザーに制限を適用することもできます。
NCPA ソフト Nofile 200000 NCPA ハード Nofile 200000
変更を適用した後、影響を受けるサービスまたはプロセスを再起動して、更新された制限を読み込みます。
結論 #
その 「開いているファイルが多すぎます」 このエラーは、プロセスがファイル記述子の最大数に達し、追加のファイルやネットワークソケットを開けなくなった場合に発生します。この制限を超えると、サービスは新しい接続を受け入れられなくなったり、正常に動作しなくなったりする可能性があります。
この状態を回避するために、管理者は システム全体のファイル記述子の制限 (fs.file-max)と プロセスごとの制限 によって定義されます ulimit 適切に構成されています。
In RELIANOID システムでは、サービス関連の制限は /etc/profile/relianoid.shただし、同じアプライアンス上で動作するサードパーティ製アプリケーションでは、 /etc/security/limits.conf 適切なファイル記述子の制限を継承できるようにします。
適切な制限を維持し、必要に応じてシステム構成を見直すことで、管理者は多数の同時接続を処理する環境で安定した運用を確保し、サービスの中断を防ぐことができます。