Pourquoi limiter le nombre de fichiers ouverts et de processus en cours d'exécution sous Linux?


14

Je n'ai pas beaucoup de connaissances sur le fonctionnement interne du système d'exploitation, alors pourquoi avons-nous des limites pour le nombre maximal de fichiers ouverts et les processus en cours d'exécution sous Linux?

J'apprécierais que quelqu'un puisse m'aider à comprendre.

Réponses:


16

C'est principalement pour des raisons historiques. Sur les ordinateurs centraux Linux plus anciens, de nombreux utilisateurs se connectaient et utilisaient les ressources de l'ordinateur central. Bien sûr, il était nécessaire de limiter, et comme de telles opérations, comme les descripteurs de fichiers et les processus, étaient intégrées au noyau, elles y étaient limitées. Il aide également à limiter les attaques comme la bombe à fourche . Une défense contre la bombe sous forme utilisant des limites de processus est montrée ici .

Il permet également de contrôler les services et les démons complexes en n'autorisant pas la fourche incontrôlée et l'ouverture de fichiers, comme ce que la bombe fork essaie de faire.

Il convient également de noter des éléments tels que la quantité de RAM et de CPU disponibles, et le fait qu'un compteur 32 bits ne peut référencer que beaucoup (seulement 4294967296 entrées pouvant être comptées par un compteur 32 bits), mais ces limites sont loin au-dessus de celles généralement définies par les programmeurs et les administrateurs système. Quoi qu'il en soit, bien avant que vous ayez 4294967296 processus, votre machine aurait probablement été redémarrée, soit comme prévu, soit lorsqu'elle a commencé à se bloquer en raison de la famine d'une autre ressource.

À moins que vous exécutiez le Titan avec ses 584 TiB de mémoire (vous ne le ferez pas, car Linux ne peut pas être exécuté comme une seule instance sur un supercalculateur), vous n'atteindrez probablement pas cette limite de processus de sitôt. Même alors, le processus moyen ne disposerait que d'environ 146 Ko de mémoire, en supposant qu'il n'y ait pas de mémoire partagée.


2
+1 pour la bombe à fourche, a montré à quel point ces méthodes récursives peuvent être dangereuses si elles sont utilisées dans le shell sans précaution!
aka_learner

9

Il y a des limites à presque tout, à la fois dans la vie et sous Linux. Parfois, les limites sont très élevées et ne méritent pas de s'inquiéter, et parfois elles sont trop basses, fixées arbitrairement par un programmeur paresseux ou fixées par des limites au matériel.

Des limites arbitraires surviennent lorsqu'un programmeur prend une décision telle que le nombre maximum de caractères autorisés dans un champ, comme une adresse. Il est beaucoup plus facile de définir une limite arbitraire que d'allouer dynamiquement de la mémoire selon les besoins. Vous ne voulez pas allouer toute la mémoire disponible à un simple champ de saisie, mais vous ne voulez pas non plus permettre à l'entrée d'écraser une autre mémoire qui peut être importante. Pour les fichiers et processus ouverts, il peut y avoir une limite arbitraire, ou elle peut être limitée par la mémoire disponible. Dans ce dernier cas, de mauvaises choses commenceront à se produire à l'approche de la limite et le système peut se bloquer, il est donc souvent bon d'avoir une limite qui entre en jeu avant que cela ne se produise. Parfois, les limites arbitraires peuvent être déterminées au démarrage en fonction de la mémoire ou de l'espace disque, et sont généralement assez intelligentes,

Ensuite, il y a des limites fixées par le matériel, telles que la taille d'un entier ou d'un caractère. Si vous avez un système 32 bits, il existe des limites fixées par la taille maximale d'un entier (4 294 967 295 si non signé, ou la moitié si signé).


1
Les limites qui semblent arbitraires peuvent en fait être basées sur des normes. La norme internationale limite les lignes d'adresse postale à 39 caractères. Une telle limite peut sembler arbitraire. Une limite de 60 caractères pour une adresse serait probablement arbitraire. Malheureusement, trop peu de programmeurs vérifient les normes, de nombreuses limites (parfois correctes) sont décidées arbitrairement.
BillThor

Je suis d'accord; lorsque je travaillais encore en tant que programmeur, je passais beaucoup de temps à rechercher les limites indiquées, comme vous l'avez dit, ou définies dans le système d'exploitation comme une macro (comme max_path, etc.). Mais je dois dire que les limites arbitraires sont généralement meilleures que pas de limites du tout, en particulier pour les longueurs de champ. :)
Marty Fried

7

Pour les processus, / proc / sys / kernel / pid_max est le pid maximum autorisé, c'est donc la limite stricte du nombre de processus pouvant s'exécuter à tout instant. Cependant, les limites de la mémoire entrent normalement en jeu bien avant cela.

Pour la limite supérieure des fichiers ouverts sur la machine entière, / proc / sys / fs / file-max est la limite stricte; ceci est basé sur la quantité de mémoire dans la machine, elle variera donc. Le noyau définit ceci comme:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

ce qui équivaut à environ 100 pour chaque 1 Mo de RAM.

Les limites par processus sont différentes. ulimit les définira.


-5

Nous avons une limite parce que les ordinateurs ont des limites, j'ai 4 Go de RAM, donc je ne peux plus lancer 15 jeux maintenant?

Je peux très probablement l'exécuter avec un certain retard, mais ce ne serait pas humain, c'est la limite de votre PC et de Kernal de Linux, vous auriez besoin d'un meilleur kernal et beaucoup de RAM pour pouvoir contenir n'importe quel programme qui vous est lancé .

Comme mon ordinateur portable lorsque j'ai exécuté Windows 7, je pouvais jouer à Battlefield, mais cela a pris 80% de ma RAM, donc si j'essayais de jouer à "Need For Speed", cela prend 60% Habituellement, je peux ouvrir les deux mais mon système entier est ralenti depuis que j'exécute 2 programmes lourds, ils se battent tous les deux pour la RAM (Random Access Memory)

En bref, un ordinateur normal ne peut pas exécuter beaucoup de programmes à la fois Musique, bloc-notes, navigateur, e-mail, jeu, vous pensez que c'est beaucoup sur un ordinateur mais c'est simple, un jeu comme World of Warcraft prend beaucoup plus de RAM et rend votre ordinateur difficile (à moins que vous n'ayez 8-16 Go de RAM comme les ordinateurs portables chers!)


Merci pour les informations sur les processus car nous savons qu'il y aura une charge CPU élevée si de nombreux processus s'exécutent simultanément, et le trafic sur les cœurs CPU sera si élevé pour le gérer et avec le temps, votre système passera en mode de blocage, ne donnant aucun droit tranche de temps à l'un des processus à exécuter, je suppose que si je ne me trompe pas. Mais pourquoi existe-t-il également une limite pour les fichiers ouverts sous Linux?
aka_learner

Je ne connais pas de limite de fichiers ouverts, je n'en ai pas du tout expérimenté, Peut-être que ce sont vos ordinateurs limités par rapport au mien, je ne suis pas sûr à ce sujet. J'ai toujours quelques 10 fichiers ouverts, puis un navigateur Web, un lecteur de musique et le terminal ouvert.
Ubisoft Terzuz

Cela arrive généralement avec moi lorsque ma base de données mysql me donne "120428 20:30:01 [ERREUR] / usr / sbin / mysqld: Impossible d'ouvrir le fichier: './djlabo_open/cart_layout.frm' (errno: 24)" erreur dans son journal des erreurs car linux ne le laisse pas ouvrir ce fichier de base de données.
aka_learner

C'est probablement quelque chose de différent, puis une limite de système d'exploitation pour ouvrir des fichiers.
Nanne

1
@Terzuz C'est vraiment basé sur le fait que les gens considèrent les réponses des autres comme étant factuellement correctes. Beaucoup de gens (dont moi, malheureusement) ont l'impression que cette réponse ne répond pas vraiment aux limites mentionnées dans la question, mais à d'autres limites.
Rétablir Monica - ζ--
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.