J'ai une longue course à Debian. À un moment donné dans lancer une erreur:
Trop de fichiers ouverts.
Fonctionnement:
ulimit -a
spectacles:
ouvrir des fichiers (-N) 1024
Je souhaite augmenter le nombre de fichiers ouverts dans 2 fois. Après exécution
ulimit -n 2048
la limite est active jusqu'à la fin de ma session, qui n'est pas applicable pour la tâche.
Comment puis-je augmenter de façon permanente le nombre de fichiers ouverts?
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 appliquées via pam_limits
sur 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 "difficile" indique une limite difficile - une limite qui ne peut pas être dépassée et ne peut pas être modifiée. Une limite douce peut être modifiée par un utilisateur (par exemple une personne sans capacités racines), mais pas au-delà de la limite difficile.
Lis le limits.conf
Pour plus d'informations sur l'utilisation pam_limits
.
Il existe également un "maximum total" 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éfinir une nouvelle valeur avec:
echo "104854" > /proc/sys/fs/file-max
Si vous souhaitez conserver la configuration entre Red Rediotd Ajouter
sys.fs.file-max=104854
à
/etc/sysctl.conf
Pour vérifier l'utilisation actuelle du fichier max:
[[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)
Comme d'autres ont dit, vous pouvez appliquer des limites spécifiques par utilisateur ou groupe dans /etc/security/limits.conf.
Remarque: Ulimit -N montre la limite molle.
ulimit -H -n
vous montrera la limite difficile.
Cela rend la sortie Ulimit -A et Ulimit -N -N assez confondante si, par exemple, vous élevez le nombre de fichiers de 1024 à 4096, car vous vous attendez à voir la sortie limite durs, mais vous voyez toujours 1024 qui est le doux limite.
En outre, rappelez-vous que ces limites sont appliquées par connexion, de sorte que vous réinstallez dans une nouvelle coquille et vérifiez vos modifications, ne vous attendez pas à ce qu'ils soient propagés aux locations existantes.
Sachez que si vous exécutez votre processus par démarrage-stop-daemon définissant des ulimits dans /etc/security/limits.conf ne fonctionne pas. Si vous voulez par exemple, vous souhaitez augmenter la limite de fichier ouverte 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.4 pour un autre processus, les réponses données devraient aider.
Cela dépend de la façon dont vous commencez votre processus de longue date. S'il est démarré au démarrage (via /etc/rcx.d/* scripts), vous devez mettre un appel ulimit dans votre script de démarrage car la limite par défaut est définie par le noyau et elle n'est pas synodible sans le recompiler.
À l'aide de /etc/security/limits.conf
pourrait fonctionner si vous utilisez cron
pour la démarrer par exemple avec une entrée comme celle-ci:
@reboot $HOME/bin/my-program
Cela devrait fonctionner car /etc/pam.d/cron active pam_limits.so.