86 votes

Pratique du maximum de descripteurs de fichiers ouverts (ulimit -n) pour un système à haut volume

Nous avons récemment commencé à tester la charge de notre application et avons remarqué qu'elle était à court de descripteurs de fichiers après environ 24 heures.

Nous exécutons RHEL 5 sur un Dell 1955 :

CPU : 2 x Dual Core 2.66GHz 4MB 5150 / 1333FSB RAM : 8GB RAM Disque dur : 2 x 160GB 2.5" SATA Hard Drives

J'ai vérifié la limite du descripteur de fichier et elle était fixée à 1024. Si l'on considère que notre application peut potentiellement avoir environ 1000 connexions entrantes et 1000 connexions sortantes, cela semble assez faible. Sans parler des fichiers réels qui doivent être ouverts.

Ma première idée était d'augmenter le paramètre ulimit -n de quelques ordres de grandeur et de relancer le test, mais je voulais connaître les conséquences potentielles d'un réglage trop élevé de cette variable.

Existe-t-il de bonnes pratiques pour définir ce paramètre, à part déterminer le nombre de descripteurs de fichiers que notre logiciel peut théoriquement ouvrir ?

83voto

sucuri Points 2807

Ces limites sont issues d'une époque où de multiples utilisateurs "normaux" (pas d'applications) partageaient le serveur, et nous avions besoin de moyens pour les empêcher d'utiliser trop de ressources.

Ils sont très bas pour les serveurs à haute performance et nous les fixons généralement à un nombre très élevé. (24k ou plus) Si vous avez besoin d'un nombre plus élevé, vous devez également modifier l'option sysctl file-max (généralement limitée à 40k sur ubuntu et 70k sur rhel) .

Réglage de l'ulimit :

# ulimit -n 99999

Sysctl max fichiers :

#sysctl -w fs.file-max=100000

Par ailleurs, et c'est très important, vous devrez peut-être vérifier si votre application présente une fuite de mémoire ou de descripteur de fichier. Utilisez lsof pour voir tous les fichiers ouverts et vérifier s'ils sont valides ou non. N'essayez pas de modifier votre système pour contourner les bogues des applications.

17voto

Ben Lessani Points 5146

Tu pourrais toujours juste

cat /proc/sys/fs/file-nr

Pendant la situation de "forte charge" pour voir combien de descripteurs de fichiers sont utilisés.

Quant au maximum, il dépend de ce que vous faites.

8voto

MarkR Points 2878

Si les descripteurs de fichiers sont des sockets tcp, etc., vous risquez d'utiliser une grande quantité de mémoire pour les tampons de sockets et autres objets du noyau ; cette mémoire ne sera pas swappable.

Mais sinon, non, en principe, il ne devrait pas y avoir de problème. Consultez la documentation du noyau pour essayer de déterminer la quantité de mémoire du noyau qu'il utilisera, et/ou testez-le.

Nous faisons tourner des serveurs de bases de données avec ~ 10 000 descripteurs de fichiers ouverts (principalement sur des fichiers de disques réels) sans problème majeur, mais ils sont en 64 bits et ont beaucoup de mémoire vive.

Le paramètre ulimit est par processus, mais il y a aussi une limite au niveau du système (32k je pense par défaut)

2voto

Grahamux Points 630

Je ne connais pas personnellement de meilleures pratiques. C'est quelque peu subjectif en fonction de la fonction du système.

Rappelez-vous que 1024 que vous voyez est une limite par utilisateur et non une limite à l'échelle du système. Considérez le nombre d'applications que vous exécutez sur ce système. Est-ce la seule ? L'utilisateur qui exécute cette application fait-il autre chose ? (IE avez-vous des humains utilisant ce compte pour se connecter et exécuter des scripts qui peuvent potentiellement s'exécuter) ?

Étant donné que la boîte n'exécute que cette seule application et que le compte qui l'exécute n'est utilisé qu'à cette fin, je ne vois aucun inconvénient à augmenter votre limite comme vous le suggérez. S'il s'agit d'une équipe de développement interne, je demanderais leur avis. S'il s'agit d'un fournisseur tiers, il peut avoir des exigences ou des recommandations spécifiques.

2voto

Kyle Points 1839

Il me semble que la meilleure réponse à cette question est "testez-le dans un environnement de développement". Je me souviens qu'il y a quelques années, Sun était nerveux quand on jouait avec ça, mais pas à ce point. À l'époque, la limite était également de 1024, je suis donc un peu surpris de voir que c'est la même chose maintenant pour Linux, il me semble qu'elle devrait être plus élevée.

J'ai trouvé le lien suivant éducatif lorsque j'ai cherché des réponses à votre question sur Google : http://www.netadmintools.com/art295.html

Et celui-ci aussi : https://stackoverflow.com/questions/1212925/on-linux-set-maximum-open-files-to-unlimited-possible

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X