Solution 1 :
Si votre processus est démarré via un script, vous pouvez placer l'appel à ulimit dans le script juste avant d'exécuter le démon.
Si vous souhaitez augmenter l'ulimit pour votre utilisateur, ou pour tous les utilisateurs, vous pouvez définir des limites qui sont appliquées via pam_limits
à la connexion. Ceux-ci sont définis dans /etc/security/limits.conf
. Dans votre cas, vous pourriez faire quelque chose comme :
* hard nofile 2048
Notez que "dur" désigne une limite stricte - une limite qui ne peut pas être dépassée et ne peut pas être modifiée. Une limite souple peut être modifiée par un utilisateur (par exemple, quelqu'un sans capacités root), mais pas au-delà de la limite stricte.
Lire le limits.conf
pour plus d'informations sur l'utilisation de pam_limits
.
Solution 2 :
Il existe également un "total max" de fichiers ouverts définis dans le noyau, vous pouvez vérifier le paramètre actuel avec :
cat /proc/sys/fs/file-max
Et définissez une nouvelle valeur avec :
echo "104854" > /proc/sys/fs/file-max
Si vous souhaitez conserver la configuration entre les redémarrages, ajoutez
sys.fs.file-max=104854
à
/etc/sysctl.conf
Pour vérifier l'utilisation maximale actuelle des fichiers :
[[email protected] proc]# cat /proc/sys/fs/file-nr
3391 969 52427
| | |
| | |
| | maximum open file descriptors
| total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)
Solution 3 :
Comme d'autres l'ont dit, vous pouvez appliquer des limites spécifiques par utilisateur ou groupe dans /etc/security/limits.conf.
Remarque :ulimit -n affiche la limite souple.
ulimit -H -n
vous montrera la limite stricte.
Cela rend la sortie ulimit -a et ulimit -n assez déroutante si, par exemple, vous augmentiez le nombre de fichiers de 1024 à 4096, comme vous vous attendriez à voir la sortie de la limite stricte, mais vous voyez toujours 1024 qui est le soft limite.
N'oubliez pas non plus que ces limites sont appliquées par connexion, alors reconnectez-vous dans un nouveau shell et vérifiez vos modifications, ne vous attendez pas à ce qu'elles soient propagées aux connexions existantes.
Solution 4 :
Sachez que si vous exécutez votre processus en définissant start-stop-daemon ulimits dans /etc/security/limits.conf ne fonctionne pas. Si vous souhaitez par exemple augmenter la limite de fichiers ouverts pour tomcat à 20000, vous devez les ajouter aux lignes à /etc/default/tomcat
:
ulimit -Hn 32768
ulimit -Sn 32768
J'ai rencontré ce problème sur debian 6.0.4Pour d'autres processus, les réponses données devraient aider.