java.io.FileNotFoundException: *****(Too many open files)

1296 ワード

詳細
linuxの下でマルチスレッドでファイルを読み取るプログラムを走って、読み込むファイルは数十万個あります.プログラム読み込み中に次の異常*****(Too many open files)が投げ出されます.
 
なぜならlinuxは1回のセッションでプログラムが同時に開くファイルの数を最大に制限しているからです.redhat 5では、この値は1024です.ulimit-n検証を使用できます.
解決策
1、この数値を一時的に修正し、使用できる
ulimit -n XXXX
 
2、永久修正
 
2.1. 現在の設定の表示
 
ulimit-n(デフォルトは1024)2.2.システムが許容できる最大オープンファイル数(一般的にはデフォルトで十分、変更する必要はありません)#cat/proc/sys/fs/file-max(デフォルトでは372998で十分)が所望の値未満の場合は、#echo 327998>/proc/sys/fs/file-maxまたは書き込み/etc/sysctlに変更できます.confでは、再起動のためにも有効です:fs.file-max = 327998
2.3. 変更/etc/security/limits.confファイルは、ユーザーの最大オープンファイル数*-nofile 2048(この行を追加)を設定することで、システムのユーザーごとの最大オープンファイル数を2048に設定します.注意nofileパラメータはtypeタイプでhardとsoftの2つの可能なオプションがあります.この2つの値はいずれも設定する必要があります.「-」は、この2つの値を後ろの数字に同時に設定することを意味します.hard limitはソフトウェアlimitの上限としてだけで、ソフトウェアlimitこそあなたが設定したシステムの現在の制限です.hard limitを設定すると、後で設定するソフトウェアlimitの値はhard limitより小さくなります.一般ユーザーはhard limitの値を下げることができますが、それを高めることはできません.rootユーザーだけがhard limitを高めることができます.2.4. shellログインを終了し、再ログインすると有効になります(ulimit-nチェックを実行します)起動したプロセスは、閉じてから再起動する必要がある場合があります.
 
リファレンス
http://chen.wenz.blog.163.com/blog/static/6774385420105994434152/
 
添付ファイルソースネットワーク整理
 
 
  • open_too_many_file.rar (2.1 KB)
  • ダウンロード回数:23