Pourquoi limiter le nombre de fichiers ouverts et exécuter des processus 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 quant au nombre maximal de fichiers ouverts et de processus en cours d'exécution sous Linux?

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

    
posée aka_learner 11.11.2012 - 18:33
la source

4 réponses

16

Ceci est principalement pour des raisons historiques. Sur les anciens mainframes Linux, 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és au noyau, il y était limité. Cela permet également de limiter les attaques comme le fourche bombe . Une défense contre la bombe de forme en utilisant les limites de processus est affichée ici .

Cela permet également de garder les services et les démons complexes en échec en ne permettant pas l’ouverture incontrôlée et l’ouverture de fichiers, comme le font les bombes à fourche.

Il faut également noter des choses comme la quantité de RAM et de CPU disponible, et le fait qu’un compteur 32 bits ne peut que référencer autant (seulement 4294967296 entrées pouvant être comptées par un compteur 32 bits), mais telles les limites sont bien supérieures à celles généralement définies par les programmeurs et les administrateurs système. Quoi qu'il en soit, bien avant que vous n'ayez les processus 4294967296, votre ordinateur aurait probablement été redémarré, soit comme prévu, soit comme il a commencé à se bloquer en raison d'une autre ressource affamée.

Sauf si vous exécutez le Titan avec ses 584 TiB de mémoire (vous ne le ferez pas depuis Linux ne peut pas être exécuté en tant qu'instance sur un supercalculateur), vous ne pourrez probablement pas atteindre cette limite de processus de sitôt. Même dans ce cas, le processus moyen ne contiendrait qu'environ 146 Ko de mémoire, sans mémoire partagée.

    
réponse donnée hexafraction 11.11.2012 - 19:43
la source
9

Il y a des limites à la plupart des choses, à la fois dans la vie et sous Linux. Parfois, les limites sont très élevées et ne valent pas la peine de s’inquiéter, et parfois elles sont trop faibles, définies arbitrairement par un programmeur paresseux ou définies 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, tel qu'une adresse. Il est beaucoup plus facile de définir des limites arbitraires que d’allouer dynamiquement de la mémoire au besoin. Vous ne souhaitez pas allouer toute la mémoire disponible à un champ de saisie simple, mais vous ne souhaitez pas que l'entrée écrase une autre mémoire importante. Pour les fichiers et les processus ouverts, il peut y avoir une limite arbitraire, ou il peut être limité par la mémoire disponible. Si c'est le cas, alors de mauvaises choses commenceront à se produire à l'approche de la limite, et le système risque de se bloquer. Il est donc souvent utile d'avoir une limite 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, mais toujours arbitraires.

Il existe ensuite des limites définies 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 définies par la taille maximale d'un nombre entier (4 294 967 295 si non signé, ou la moitié si signé).

    
réponse donnée Marty Fried 11.11.2012 - 19:56
la source
7

Pour les processus, / proc / sys / kernel / pid_max est le maximum autorisé par pid, il s'agit donc de la limite stricte du nombre de processus pouvant être exécutés à tout moment. Cependant, les limites de mémoire entrent normalement en jeu bien avant.

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, donc elle variera. Le noyau définit ceci comme suit:

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

qui est d'environ 100 pour chaque 1 Mo de RAM.

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

    
réponse donnée Colin Ian King 12.11.2012 - 13:19
la source
-5

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

Je peux probablement le lancer avec un certain décalage mais ce ne serait pas humain, c'est la limite de votre PC et de Linux Kernal, vous auriez besoin d'un meilleur kernal et de beaucoup de RAM pour pouvoir contenir n'importe quel programme jeté à vous.

Comme mon ordinateur portable quand je courais Windows 7, je pouvais jouer à Battlefield, mais il me fallait 80% de ma RAM, donc si j'essayais de jouer à "Need For Speed", cela prend 60% de temps. tout le système est ralenti depuis que j'utilise 2 programmes Heavy Duty, ils se battent tous 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 ce n'est qu'un jeu. Un jeu comme World of Warcraft prend beaucoup plus de RAM et rend votre ordinateur difficile (à moins les ordinateurs portables le font!)

    
réponse donnée Ubisoft Terzuz 11.11.2012 - 18:38
la source

Lire d'autres questions sur les étiquettes