web-dev-qa-db-fra.com

Pourquoi le nombre de fichiers ouverts est-il limité sous Linux?

En ce moment, je sais comment:

  • trouver la limite de fichiers ouverts par processus: ulimit -n
  • compter tous les fichiers ouverts par tous les processus: lsof | wc -l
  • obtenir le nombre maximum autorisé de fichiers ouverts: cat /proc/sys/fs/file-max

Ma question est: pourquoi y a-t-il une limite de fichiers ouverts sous Linux?

143
xanpeng

La raison en est que le système d'exploitation a besoin de mémoire pour gérer chaque fichier ouvert, et la mémoire est une ressource limitée - en particulier sur les systèmes embarqués.

En tant qu'utilisateur root, vous pouvez modifier le nombre maximal de fichiers ouverts par processus (via ulimit -n) et par système (par exemple echo 800000 > /proc/sys/fs/file-max).

91
jofel

Veuillez noter que lsof | wc -l résume un grand nombre d'entrées dupliquées (les processus fourchus peuvent partager des descripteurs de fichiers, etc.). Ce nombre pourrait être bien supérieur à la limite définie dans /proc/sys/fs/file-max.

Pour obtenir le nombre actuel de fichiers ouverts du point de vue du noyau Linux, procédez comme suit:

cat /proc/sys/fs/file-nr

Exemple: ce serveur contient 40096 des 65536 fichiers ouverts au maximum, bien que lsof signale un nombre beaucoup plus élevé:

# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr 
40096   0       65536
# lsof | wc -l
521504
67
grebneke

Je pense que c'est en grande partie pour des raisons historiques.

Un descripteur de fichier Unix est une petite valeur int, renvoyée par des fonctions comme open et creat, et passée à read, write, close, etc.

Au moins dans les premières versions d'Unix, un descripteur de fichier était simplement un index dans un tableau de structures par processus de taille fixe, où chaque structure contient des informations sur un fichier ouvert. Si je me souviens bien, certains des premiers systèmes limitaient la taille de ce tableau à environ 20.

Les systèmes plus modernes ont des limites plus élevées, mais ont conservé le même schéma général, en grande partie hors d'inertie.

18
Keith Thompson