web-dev-qa-db-fra.com

Limites du nombre de descripteurs de fichiers

J'essaie d'installer 389-ds, Et ça 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 fichiers, mais je ne comprends pas les limites souples et strictes.

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

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

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

Mais quelles sont les limites matérielles/logicielles de ulimit, et comment se rapportent-elles au nombre stocké dans /proc/sys/fs/file-max?

34
Rafael Adel

Selon la documentation du noya , /proc/sys/file-max est le nombre maximum, total et global de descripteurs de fichiers que le noyau allouera avant d'étouffer. C'est la limite du noyau, pas celle de votre utilisateur actuel. Donc vous pouvez ouvrez 590432, à condition que vous soyez seul sur un système inactif (mode mono-utilisateur, pas de démons en cours d'exécution).

Notez que la documentation est obsolète: le fichier a été proc/sys/fs/file-max pendant longtemps. Merci à Martin Jambon de l'avoir signalé.

La différence entre les limites douces et dures est répondue ici, sur SE . Vous pouvez augmenter ou diminuer une limite logicielle en tant qu'utilisateur ordinaire, à condition de ne pas dépasser la limite matérielle. Vous pouvez également abaisser une limite fixe (mais vous ne pouvez pas l'augmenter à nouveau pour ce processus). En tant que superutilisateur, vous pouvez augmenter et réduire les limites strictes et souples. Le schéma de double limite est utilisé pour appliquer les stratégies système, mais permet également aux utilisateurs ordinaires de se fixer des limites temporaires et de les modifier ultérieurement.

Notez que si vous essayez d'abaisser une limite stricte en dessous de la limite souple (et que vous n'êtes pas le superutilisateur), vous obtiendrez EINVAL (argument non valide).

Donc, dans votre cas particulier, ulimit (qui est identique à ulimit -Sf) indique que vous n'avez pas de limite souple sur 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 -Hn rapports sur le -n limite (nombre maximum de descripteurs de fichiers ouverts), pas le -f limite, c'est pourquoi la limite souple semble supérieure à la limite dure. Si vous entrez ulimit -Hf vous obtiendrez également "illimité".

39
Alexios

L'appel système "select" est l'une des nombreuses décisions horribles de conception mortelle d'Unix qui fait que même windows95 semble toujours aussi bon en comparaison.

Il aurait dû être interdit il y a 20 ans et nous pourrions maintenant avoir la possibilité de gérer des fichiers illimités sans problème.

Vous pouvez facilement augmenter le nombre de descripteurs de fichiers avec la configuration du noyau et ulimit MAIS rappelez-vous que si une bibliothèque utilise un appel système "select", votre programme deviendra instable (corruption de mémoire) et échouera.

Select ne peut gérer que les descripteurs de fichiers de 0 à 1023 et si vous en introduisez un avec une valeur plus élevée, il poussera de manière aléatoire dans votre mémoire et le select ne répétera jamais le descripteur comme fonctionnant. Malheureusement, de nombreuses bibliothèques utilisent select.

0
Lothar