私のJavaプログラムがここ開いているファイルが多すぎますエラーが、lsofのは
Caused by: java.io.IOException: Too many open files
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)...
で失敗している開いているファイルの法的数を示し/etc/security/limits.conf
からの重要な線です。彼らは、500Kでのユーザーの最大のファイルを設定します。私は開くファイルの数をカウントするためにlsof
を走った
root soft nofile 500000
root hard nofile 500000
* soft nofile 500000
* hard nofile 500000
- 両方のグローバルとJVMプロセスによって。私は/proc/sys/fs
のカウンターを調べました。すべてはOKのようです。私のプロセスは4301個のファイルしか開かず、制限は500kです:
:~# lsof | wc -l
5526
:~# lsof -uusername | wc -l
4301
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-nr
4736 0 744363
これはUbuntu 11.04サーバーです。私は再起動しているので、これらのパラメータが使用されていることを肯定的です。
私はこのように、setuidgidを使用してプロセスを開始する、それが関連するかどうかわからないが、プロセスは成り上がりスクリプトによって開始されます。
exec setuidgid username java $JAVA_OPTS -jar myprogram.jar
私が行方不明ですか?
ヒープスペースを更新して、それより大きな最大サイズを与えてください。なぜ二つが関連するのかはっきりしないが、私は無数の異なる問題のためにそのエラーにぶつかった。 – Relic
面白い、ありがとう。しかしそれはすでに-Xmx5800mです。 – hughw
いくつかのプロセスツリーでulimitを使って新しい制限を設定していますか? – Jayan