Trop d'erreurs de fichiers ouverts mais lsof affiche un nombre légal de fichiers ouverts

Mon programme Java est un échec avec

Caused by: java.io.IOException: Too many open files
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.createNewFile(File.java:883)...

Ici sont les traits les plus importants de /etc/security/limits.conf. Ils ont mis le max des fichiers d'un utilisateur à 500k:

root                     soft    nofile          500000
root                     hard    nofile          500000
*                        soft    nofile          500000
*                        hard    nofile          500000

J'ai couru lsof à compter le nombre de fichiers ouverts, à la fois globalement et par le processus de jvm. J'ai examiné les compteurs dans /proc/sys/fs. Tout semble OK. Mon processus ne doit 4301 des fichiers ouverts et la limite est de 500 k:

:~# 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

C'est une Ubuntu server 11.04. J'ai même redémarré donc je suis positif ces paramètres sont utilisés.

Je ne sais pas si c'est pertinent, mais le processus a commencé par un arriviste script, qui démarre le processus en utilisant setuidgid, comme ceci:

exec setuidgid username java $JAVA_OPTS -jar myprogram.jar

Ce que je suis absent?

source d'informationauteur hughw