web-dev-qa-db-fra.com

Trop de fichiers ouverts sur Debian

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?

15
FoxyBOA

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.

12
Daniel Lawson

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:

[root@srv-4 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)
13
rkthkr

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.

4
Tom Feiner

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.

2
Janning

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.

1
Raphaël Hertzog