Limite du nombre de descripteurs de fichier


34

J'essaye d'installer 389-ds, et cela me donne cet avertissement:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

Je comprends les descripteurs de fichier, mais pas les limites souples et strictes.

Quand je cours cat /proc/sys/fs/file-max, je reviens 590432. Cela devrait impliquer que je puisse ouvrir jusqu'à 590432 fichiers (c'est-à-dire avoir jusqu'à 590432 descripteurs de fichier.

Mais quand je cours ulimit, cela me donne des résultats différents:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

Mais à partir de quelle limite dure / soft ulimit, et comment se rapportent-ils au nombre stocké dans /proc/sys/fs/file-max?

Réponses:


39

Selon la documentation du noyau , /proc/sys/file-maxcorrespond au nombre maximal, total et global de descripteurs de fichier que le noyau va allouer avant d’étouffer. C'est la limite du noyau, pas celle de l'utilisateur actuel. Vous pouvez donc ouvrir 590432, à condition que vous soyez seul sur un système inactif (mode mono-utilisateur, aucun démon en cours d'exécution).

Notez que la documentation est obsolète: le fichier existe depuis proc/sys/fs/file-maxlongtemps. Merci à Martin Jambon de l'avoir signalé.

La différence entre les limites souples et les limites strictes est traitée ici, sur SE . Vous pouvez augmenter ou réduire une limite souple en tant qu'utilisateur ordinaire, à condition de ne pas dépasser la limite stricte. Vous pouvez également abaisser une limite stricte (mais vous ne pouvez plus la relever pour ce processus). En tant que superutilisateur, vous pouvez augmenter et diminuer les limites strictes et modérées. Le schéma à double limite est utilisé pour appliquer les stratégies système, mais permet également aux utilisateurs ordinaires de définir eux-mêmes des limites temporaires et de les modifier ultérieurement.

Notez que si vous essayez d'abaisser une limite fixe en dessous de la limite souple (et que vous n'êtes pas le super-utilisateur), vous récupérerez EINVAL(argument non valide).

Ainsi, dans votre cas particulier ulimit(ce qui correspond à ulimit -Sf), vous n’avez pas de limite souple à la taille des fichiers écrits par le shell et ses sous-processus . (c'est probablement une bonne idée dans la plupart des cas)

Votre autre invocation, ulimit -Hnindique la -nlimite (nombre maximal de descripteurs de fichier ouverts), et non la -flimite, raison pour laquelle la limite souple semble supérieure à la limite stricte. Si vous entrez, ulimit -Hfvous aurez également «illimité».


14
Sous Linux 4.4.0, le chemin fichier-max est /proc/sys/fs/file-max.
Martin Jambon

s'il vous plaît la limite dure ulimit -Hn cible-t-elle la limite même du système aux capacités de descripteur de fichier allouées?
Webwoman

2
@Webman: non, ce n'est pas le cas. ulimitaffecte que les limites pour le processus en cours . Les limites du processus actuel sont également léguées aux processus enfants, mais chaque processus a son propre décompte. Par exemple ulimit -Hn 10, vous ne pouvez avoir que 10 descripteurs de fichier ouverts à la fois. Chaque processus enfant que vous créez ne peut avoir que 10 descripteurs de fichier maximum. Seul le superutilisateur peut augmenter une limite une fois définie. Si vous en définissez un trop bas, votre seule option peut être de tuer votre processus shell et d’en démarrer un nouveau.
Alexios

0

L’appel système "select" est l’une des nombreuses et terribles décisions prises par Unix qui font que même Windows 95 a toujours si belle apparence en comparaison.

Il aurait dû être interdit il y a 20 ans et nous pourrions désormais avoir la possibilité de créer un nombre illimité de gestionnaires de fichiers sans problèmes.

Vous pouvez facilement augmenter le nombre de descripteurs de fichiers avec la configuration du noyau et ulimit BUT mais n'oubliez pas que si une bibliothèque utilise l'appel système "select", votre programme deviendra instable (corruption de mémoire) et échouera.

Select ne peut gérer que les descripteurs de fichier compris entre 0 et 1023. Si vous en alimentez une avec une valeur plus élevée, elle sera insérée de manière aléatoire dans votre mémoire et la sélection ne répètera jamais le descripteur. Malheureusement, de nombreuses bibliothèques utilisent select.


Votre commentaire est un avertissement utile, mais au lieu de prendre un ton déchaîné, il aurait été bien plus utile de citer la fd_set(3)page de manuel et de préciser la limite FD_SETSIZE. Et le meilleur aurait été une suggestion d’appel de remplacement poll(3), comme dans cette réponse
Davor Cubranic
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.