Y a-t-il une limite (technique ou pratique) à la taille que vous pouvez configurer le nombre maximum de fichiers ouverts sous Linux? Y a-t-il des effets négatifs si vous le configurez à un très grand nombre (disons 1-100M)?
Je pense à l'utilisation du serveur ici, pas aux systèmes embarqués. Les programmes utilisant d'énormes quantités de fichiers ouverts peuvent bien sûr consommer de la mémoire et être lents, mais je m'intéresse aux effets indésirables si la limite est configurée beaucoup plus grande que nécessaire (par exemple, la mémoire consommée par la configuration uniquement).
linux
files
limit
open-files
Sampo
la source
la source
Réponses:
Je soupçonne que la raison principale de la limite est d'éviter une consommation excessive de mémoire (chaque descripteur de fichier ouvert utilise la mémoire du noyau). Il sert également de protection contre les applications boguées qui fuient les descripteurs de fichiers et consomment des ressources système.
Mais étant donné l'absurdité des systèmes modernes de RAM par rapport aux systèmes d'il y a 10 ans, je pense que les valeurs par défaut aujourd'hui sont assez faibles.
En 2011, la limite stricte par défaut pour les descripteurs de fichiers sous Linux est passée de 1024 à 4096 .
Certains logiciels (par exemple MongoDB) utilisent beaucoup plus de descripteurs de fichiers que la limite par défaut. Les gens de MongoDB recommandent d'augmenter cette limite à 64 000 . J'ai utilisé un
rlimit_nofile
de 300 000 pour certaines applications.Tant que vous gardez la limite souple à la valeur par défaut (1024), il est probablement assez sûr d'augmenter la limite dure. Les programmes doivent appeler
setrlimit()
afin d'élever leur limite au-dessus de la limite souple, et sont toujours plafonnés par la limite dure.Voir aussi quelques questions connexes:
la source
L'impact ne serait normalement pas observable, mais le module IO du noyau devra prendre en charge tous ces descripteurs de fichiers ouverts et ils pourraient également avoir un impact sur l'efficacité du cache.
De telles limites ont l'avantage de protéger l'utilisateur contre ses propres erreurs (ou celles de tiers). Par exemple, si vous exécutez un petit programme ou script qui bifurque indéfiniment, il finira par bloquer sur l'un des
ulimit
s et empêchera donc un gel informatique plus intense (éventuellement irrécupérable).Sauf si vous avez des raisons précises d'augmenter l'une de ces limites, vous devez l'éviter et mieux dormir.
la source
Il est techniquement limité à la valeur maximale du long non signé (C Lang) soit 4 294 967 295
Référence:
fs.h
fichierla source
Je pense que votre préoccupation est compréhensible, mais très probablement Linux ne consommera pas beaucoup de mémoire pour les descripteurs de fichiers configurés (mais pas utilisés) :)
Je ne me souviens pas d'un tel problème dans ma carrière professionnelle depuis 10 ans.
Cordialement.
la source
Calme tard mais cela devrait aider tout le monde à obtenir la réponse à cette question. La limite pratique du nombre de fichiers ouverts sous Linux peut également être comptée en utilisant le nombre maximum de descripteurs de fichiers qu'un processus peut ouvrir.
J'ai vu des limites changer de système en système. Dans la page de manuel getlimit , vous pouvez voir qui
RLIMIT_NOFILE-1
spécifie les limites en interne.Pour vérifier la valeur RLIMIT_NOFILE, vous pouvez utiliser l'instruction ci-dessous pour obtenir un tuple
python -c "import resource; print(resource.getrlimit(resource.RLIMIT_NOFILE))"
Le tuple renvoie les résultats sous la forme (Soflimit, hardlimit). Pour moi fonctionnant sur plusieurs systèmes, les résultats sont comme ci-dessous
Remarque: 9223372036854775807 ce nombre signifie simplement l'infini. Vous atteindrez toujours d'autres limites de ressources avant de toucher cela. Si vous avez modifié le hardlimit sur un système au-delà de ce qu'il est, vous devrez modifier les paramètres du noyau.
la source