Question Trop de fichiers ouverts sur Debian


J'ai un long processus en cours chez Debian. À un moment donné, jetez une erreur:

Trop de fichiers ouverts.

Fonctionnement:

ulimit -a

spectacles:

ouvrir les fichiers (-n)   1024

Je souhaite augmenter le nombre de fichiers ouverts en 2 fois. Après l'exécution

ulimit -n 2048

la limite est active jusqu'à la fin de ma session, ce qui n'est pas applicable pour la tâche.

Comment puis-je augmenter de façon permanente le nombre de fichiers ouverts?


15
2018-06-05 10:00


origine




Réponses:


Si votre processus est démarré via un script, vous pouvez placer l'appel à ulimit dans le script juste avant l'exécution du démon.

Si vous souhaitez augmenter la valeur ulimit pour votre utilisateur ou pour tous les utilisateurs, vous pouvez définir des limites appliquées via pam_limits lors de la connexion. Ceux-ci sont mis en /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. Un utilisateur peut modifier une limite souple (par exemple, une personne dépourvue de capacités root), mais pas au-delà de la limite stricte.

Lis le limits.conf pour plus d'informations sur l'utilisation pam_limits.


11
2018-06-05 10:13



Aux limites conf j'ai 2 lignes: * soft nofile 4096 * hard nofile 8192 Qui n'ont aucun effet. - FoxyBOA
Et vous vous êtes déconnecté et à nouveau depuis que vous les avez testés? Cela signifie que vous vous connecterez directement à partir de X / GNOME / KDE, etc., si vous essayez ceci sur une machine locale. - Daniel Lawson
Oui. /etc/security/limits.conf ne fonctionne pas pour moi. Je vais essayer la deuxième approche. - FoxyBOA
/etc/security/limits.conf ne fonctionne qu'avec les services qui utilisent pam et le module pam_limits (voir /etc/pam.d/ pour la configuration PAM de chaque service et /etc/pam.d/common-* en particulier) . Cela concerne donc toutes les sessions utilisateur créées par sshd, gdm, login, etc. Cela ne concerne pas tous les programmes lancés au démarrage ... - Raphaël Hertzog
J'ai dit quelque chose à cet effet, mais merci de l'avoir clarifié. Le PO n'a pas précisé s'il s'agissait d'un service ou d'un processus exécuté par son utilisateur. - Daniel Lawson


Il y a aussi un "total maximum" de fichiers ouverts définis dans le noyau, vous peut vérifier le réglage actuel avec:

cat /proc/sys/fs/file-max 

Et définissez une nouvelle valeur avec:

echo "104854" > /proc/sys/fs/file-max

Si vous voulez conserver la configuration entre les redémarrages, ajoutez

sys.fs.file-max=104854

à

/etc/sysctl.conf

Pour vérifier l'utilisation actuelle maximale du fichier:

[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)

11
2018-06-05 10:25



Notez que si les descripteurs de fichier alloués gratuitement affichent 0, cela signifie simplement que le nombre de descripteurs de fichiers alloués correspond exactement au nombre de descripteurs de fichiers utilisés. - nojak


Comme d'autres l'ont déjà dit, vous pouvez appliquer des limites spécifiques par utilisateur ou groupe dans /etc/security/limits.conf.

Remarque: ulimit -n indique la limite souple.

ulimit -H -n 

va vous montrer la limite dure.

Cela rend les sorties ulimit -a et ulimit -n assez déroutantes si, par exemple, vous augmentez le nombre de fichiers de 1024 à 4096, car vous vous attendez à voir la sortie en limite stricte, mais vous voyez toujours 1024, qui est le fichier limite.

De plus, rappelez-vous que ces limites sont appliquées à chaque connexion. Vous devez donc vous reconnecter à un nouveau shell et vérifier vos modifications. Ne vous attendez pas à ce qu'elles soient propagées aux connexions existantes.


4
2018-06-05 10:35





Sachez que si vous exécutez votre processus avec start-stop-daemon, définir ulimits dans /etc/security/limits.conf ne fonctionnera pas. Si vous voulez par exemple augmenter la limite de fichiers ouverts pour tomcat à 20000, vous devez les ajouter aux lignes suivantes: /etc/default/tomcat:

ulimit -Hn 32768
ulimit -Sn 32768

J'ai rencontré ce problème sur Debian 6.0.4 Pour d'autres processus, les réponses données devraient aider.


2
2018-01-30 11:54





Cela dépend de la façon dont vous démarrez votre processus de longue durée. S'il est démarré au démarrage (via les scripts /etc/rcX.d/*), vous devez alors placer un appel ulimit dans votre script de démarrage car la limite par défaut est définie par le noyau et ne peut être réglée sans la recompiler.

En utilisant /etc/security/limits.conf pourrait fonctionner si vous utilisez cron pour le 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
2018-06-06 12:15





Une très belle commande est ulimit -n mais il y a un problème avec trop de connexions et trop de fichiers ouverts:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 519357
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

-1
2018-03-17 01:08



J'ai essayé de clarifier votre réponse, mais je ne comprends toujours pas ce que vous essayez de dire à la question des affiches originales. Pouvez-vous essayer de nettoyer cela plus loin? - slm
Aussi c'est la sortie de ulimit -a, ne pas ulimit -n. - Yvan


Vous pouvez ajouter ceci dans /etc/security/limits.conf

root soft nofile 100000
root hard nofile 100000

sauvegarder puis redémarrer.


-1
2017-12-12 11:46



Y at-il quelque chose de nouveau ici qui ne figure pas dans la réponse acceptée à cette question de 5 ans? - Andrew Schulman