Warum die Anzahl der geöffneten Dateien und der ausgeführten Prozesse unter Linux begrenzen?

14

Ich habe nicht viel Wissen über die interne Arbeitsweise des Betriebssystems. Warum haben wir also Grenzen für die maximale Anzahl offener Dateien und für die Ausführung von Prozessen unter Linux?

Ich würde mich freuen, wenn mir jemand helfen könnte, das zu verstehen.

aka_learner
quelle

Antworten:

16

Dies ist hauptsächlich aus historischen Gründen. Auf älteren Linux-Großrechnern stellen viele Benutzer eine Verbindung her und verwenden die Ressourcen des Großrechners. Natürlich war es notwendig zu begrenzen, und da solche Operationen wie Dateihandles und Prozesse in den Kernel eingebaut wurden, war es dort begrenzt. Es hilft auch, Angriffe wie die Gabelbombe zu begrenzen . Eine Verteidigung gegen die Form Bombe unter Verwendung von Prozessgrenzen gezeigt hier .

Es hilft auch dabei, komplexe Dienste und Daemons in Schach zu halten, indem es nicht zulässt, dass sich Forking und Datei öffnen, ähnlich wie es die Gabelbombe versucht.

Zu beachten sind auch Dinge wie die Größe des verfügbaren Arbeitsspeichers und der CPU sowie die Tatsache, dass ein 32-Bit-Zähler nur so viel referenzieren kann (nur 4294967296 Einträge, die von einem 32-Bit-Zähler gezählt werden können), aber solche Grenzen sind weit über denen, die normalerweise von Programmierern und Systemadministratoren festgelegt werden. Wie auch immer, lange bevor Sie 4294967296 Prozesse haben, wäre Ihr Computer wahrscheinlich neu gestartet worden, entweder wie geplant oder als er sich aufgrund eines Mangels an einer anderen Ressource zu blockieren begann.

Wenn Sie den Titan nicht mit seinen 584 TiB Arbeitsspeicher ausführen (dies wird nicht der Fall sein, da Linux nicht als eine Instanz auf einem Supercomputer ausgeführt werden kann), werden Sie dieses Prozesslimit wahrscheinlich bald nicht erreichen. Selbst dann würde der durchschnittliche Prozess nur ungefähr 146 KB Arbeitsspeicher haben, vorausgesetzt, kein gemeinsamer Arbeitsspeicher.

Wiedereinstellung von Monica - ζ--
quelle
2
+1 für Gabelbombe, zeigte, wie gefährlich diese rekursiven Methoden sein können, wenn sie in der Schale ohne Vorsicht verwendet werden!
aka_learner
9

Fast alles hat Grenzen, sowohl im Leben als auch unter Linux. Manchmal sind die Grenzwerte sehr hoch und es lohnt sich nicht, sich Sorgen zu machen, und manchmal sind sie zu niedrig, sie werden willkürlich von einem faulen Programmierer festgelegt oder sie werden durch Grenzwerte für die Hardware festgelegt.

Willkürliche Grenzen ergeben sich, wenn ein Programmierer eine Entscheidung trifft, z. B. die maximale Anzahl von Zeichen, die in einem Feld zulässig sind, z. B. eine Adresse. Es ist viel einfacher, ein beliebiges Limit festzulegen, als den Speicher nach Bedarf dynamisch zuzuweisen. Sie möchten nicht den gesamten verfügbaren Speicher einem einfachen Eingabefeld zuweisen, aber Sie möchten nicht zulassen, dass der Eingang anderen möglicherweise wichtigen Speicher überschreibt. Für geöffnete Dateien und Prozesse gibt es möglicherweise eine willkürliche Beschränkung oder sie ist durch den verfügbaren Speicher begrenzt. In letzterem Fall beginnen schlechte Dinge zu passieren, wenn Sie sich dem Limit nähern, und das System kann hängen bleiben. Daher ist es oft gut, ein Limit zu haben, das vorher ins Spiel kommt. Manchmal können die willkürlichen Grenzen beim Start abhängig vom Speicher oder Speicherplatz festgelegt werden und sind normalerweise ziemlich intelligent.

Dann gibt es durch die Hardware festgelegte Grenzen, beispielsweise die Größe einer Ganzzahl oder eines Zeichens. Wenn Sie über ein 32-Bit-System verfügen, gibt es Beschränkungen, die durch die maximale Größe einer Ganzzahl festgelegt werden (4.294.967.295, falls nicht signiert, oder die Hälfte davon, falls signiert).

Marty Fried
quelle
1
Grenzen, die willkürlich erscheinen, können tatsächlich auf Standards basieren. Der internationale Standard begrenzt die postalischen Adresszeilen auf 39 Zeichen. Eine solche Begrenzung kann willkürlich erscheinen. Ein Limit von 60 Zeichen für eine Adresse wäre wahrscheinlich beliebig. Leider überprüfen zu wenige Programmierer die Standards, so dass viele (manchmal korrekte) Grenzwerte willkürlich festgelegt werden.
BillThor
Genau; Als ich noch als Programmierer gearbeitet habe, habe ich viel Zeit darauf verwendet, nach festgelegten Grenzwerten zu suchen, entweder wie Sie sagten oder im Betriebssystem als Makro (wie max_path usw.) definiert. Aber ich muss sagen, dass willkürliche Grenzen in der Regel besser sind als gar keine Grenzen, insbesondere für Feldlängen. :)
Marty Fried
7

Für Prozesse ist / proc / sys / kernel / pid_max die maximal zulässige pid. Dies ist also die feste Grenze für die Anzahl der Prozesse, die zu einem bestimmten Zeitpunkt ausgeführt werden können. Speicherbeschränkungen spielen jedoch normalerweise schon lange vorher eine Rolle.

Für die Obergrenze für offene Dateien auf dem gesamten Computer ist / proc / sys / fs / file-max die harte Grenze. Dies hängt von der Größe des Arbeitsspeichers auf dem Computer ab und ist daher unterschiedlich. Der Kernel setzt dies auf:

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

Das sind ungefähr 100 für jeweils 1 MB RAM.

Die Grenzwerte pro Prozess sind unterschiedlich. ulimit wird diese definieren.

Colin Ian King
quelle
-5

Wir haben ein Limit, weil Computer ein Limit haben, ich habe 4 GB RAM, also kann ich jetzt nicht 15 Spiele ausführen, oder?

Ich kann es höchstwahrscheinlich mit einer gewissen Verzögerung ausführen, aber es wäre nicht menschlich. Es ist die Grenze für Ihren PC und den Linux-Kernel. Sie würden eine bessere Kernel und eine Menge RAM benötigen, um in der Lage zu sein, jedes Programm zu halten, das auf Sie geworfen wird .

Wie mein Laptop, als ich Windows 7 ausführte, konnte ich Battlefield spielen, aber es brauchte 80% meines Arbeitsspeichers. Wenn ich also versuchte, "Need For Speed" zu spielen, brauchte ich 60%. Normalerweise kann ich beide öffnen, aber dann ist mein gesamtes System verlangsamt, da ich 2 Heavy-Duty-Programme laufe, beide kämpfen um RAM (Random Access Memory)

Kurz gesagt, ein normaler Computer kann nicht viele Programme gleichzeitig ausführen. Musik, Notizblock, Browser, E-Mail, Spiel. Sie denken, das ist viel auf einem Computer, aber das ist nur so. Ein Spiel wie World of Warcraft nimmt viel mehr RAM und Speicherplatz in Anspruch macht Ihrem Computer zu schaffen (es sei denn, Sie haben 8-16 GB RAM wie teure Laptops!)

Ubisoft Terzuz
quelle
Vielen Dank für die Informationen zu Prozessen, von denen wir wissen, dass sie eine hohe CPU-Auslastung aufweisen, wenn viele Prozesse gleichzeitig ausgeführt werden, und der Datenverkehr auf den CPU-Kernen so hoch ist, dass er mit der Zeit nicht mehr reagiert Zeitscheibe, um einen der Prozesse auszuführen, denke ich, wenn ich mich nicht irre. Aber warum gibt es in Linux auch eine Beschränkung für geöffnete Dateien?
aka_learner
Ich kenne keine Begrenzung für offene Dateien, das habe ich überhaupt nicht erlebt. Vielleicht sind Ihre Computer im Vergleich zu meinen begrenzt. Ich bin mir in dieser Angelegenheit nicht sicher. Ich habe immer ein paar 10 Dateien geöffnet, dann einen Webbrowser, Music Player und das Terminal geöffnet.
Ubisoft Terzuz
Normalerweise passiert es bei mir, wenn meine MySQL-Datenbank Folgendes ausgibt: "120428 20:30:01 [ERROR] / usr / sbin / mysqld: Datei kann nicht geöffnet werden: './djlabo_open/cart_layout.frm' (errno: 24)" Fehler im Fehlerprotokoll, da Linux diese Datenbankdatei nicht öffnen kann.
aka_learner
Das ist wahrscheinlich etwas anderes als ein OS-Limit zum Öffnen von Dateien.
Nanne
1
@Terzuz Es hängt wirklich davon ab, ob die Menschen die Antworten der anderen für richtig halten. Viele Menschen (leider auch ich) haben das Gefühl, dass diese Antwort möglicherweise nicht wirklich die in der Frage genannten, sondern andere Grenzen anspricht.
Wiedereinsetzung von Monica - ζ--