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 divulguent des descripteurs de fichiers et consomment des ressources système.
Mais étant donné la quantité absurde de RAM des systèmes modernes par rapport aux systèmes d'il y a 10 ans, je pense que les valeurs par défaut sont aujourd'hui assez faibles.
En 2011, la limite stricte par défaut pour les descripteurs de fichiers sous Linux est passée de 1 024 à 4 096.
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 maintenez la limite souple à la valeur par défaut (1024), il est probablement assez sûr d'augmenter la limite stricte. 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 :
- https://serverfault.com/questions/356962/where-are-the-default-ulimit-values-set-linux-centos
- https://serverfault.com/questions/773609/how-do-ulimit-settings-impact-linux
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 de ses propres erreurs (ou de celles de tiers). Par exemple, si vous exécutez un petit programme ou un script qui bifurque indéfiniment, il finira par se bloquer sur l'un des ulimit
s et ainsi empêcher un blocage informatique plus intense (éventuellement irrécupérable).
À moins que vous n'ayez des raisons précises d'augmenter l'une de ces limites, vous devriez l'éviter et mieux dormir.
Il est techniquement limité à la valeur maximale de long non signé (C Lang), c'est-à-dire 4 294 967 295
Référence :fs.h
fichier
/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
unsigned long nr_files; /* read only */
unsigned long nr_free_files; /* read only */
unsigned long max_files; /* tunable THIS IS OUR VALUE */
};