Linux のプロセスハンドル数の増大対処法
Linuxプロセスが大量のファイルハンドルを開いている場合、解決策は次のとおりです。
- システム全体のハンドルの制限数の増加:/etc/security/limits.conf ファイルを変更して、システム全体の Handler 数を増加できます。ファイルに次の行を追加する必要があります。
- * ソフト nofile 65535
* ハード nofile 65535 - システムの再起動、または再ログイン後に、新しいハンドル数の制限は有効になります。
- コードに setrlimit() 関数を用いて、プロセスレベルのハンドル数の上限を増やします。プログラム内で以下のコードを呼び出します。
- #include <sys/resource.h>
struct rlimit limit;
limit.rlim_cur = 65535;
limit.rlim_max = 65535;
setrlimit(RLIMIT_NOFILE, &limit); - プログラムを実行すると、プロセスが使用できるハンドル数の制限が増えます。
- コードを最適化して、ハンドル数の使用を削減: 無効なハンドルの作成や、ハンドルのクローズを忘れている問題がないかコードを確認します。不要になったハンドルは、時間を置かずクローズすることで、ハンドルによって占有されていたリソースを解放できます。
- 「ps -ef | grep defunct」コマンドでシステム内に過剰な僵尸プロセスが存在するか確認します。過剰な場合は適切な方法でゾンビプロセスをクリーンアップします。
- システム内のハードウェアリソースを確認する:システム内のハードウェアリソースが不足していると、メモリ不足などの問題が発生し、プロセスハンドル数の上限を超える可能性があります。その場合は、ハードウェアリソースの増設またはシステム構成の最適化が必要です。
これは一般的な解決策ですが、システムやアプリなどによって具体的な解決策は異なる場合があります。