Linux: Too many open files
プロセスがオープンできるファイルディスクリプタの上限に達した場合のエラー
概要
プロセスがオープンできるファイルディスクリプタ(ファイル、ソケット、パイプ等)の数が上限に達した場合に発生するエラーです。高負荷なWebサーバーやデータベースで頻繁に発生します。
エラーメッセージ
Too many open files
java.io.IOException: Too many open files
Error: EMFILE, too many open files
socket: Too many open files
accept: Too many open files
原因
- ulimitの制限値が低い: デフォルト値(通常1024)が不足
- ファイルディスクリプタのリーク: ファイルやソケットをclose()していない
- 大量の同時接続: Webサーバーやプロキシで接続数が多い
- システム全体のファイル数上限: カーネルパラメータ
fs.file-maxの制限
解決策
1. 現在の制限値を確認
| |
2. ulimitを一時的に変更
| |
3. limits.confで永続的に変更
| |
# ユーザー単位
myapp soft nofile 65536
myapp hard nofile 65536
# 全ユーザー
* soft nofile 65536
* hard nofile 65536
| |
4. systemdサービスの制限値を変更
| |
| |
5. カーネルパラメータの変更
| |
6. ファイルリークの調査
| |
関連エラー
Linux の他のエラー
この記事は役に立ちましたか?