2014-10-02 22 views
7

Wir haben gerade die Semaphoren auf unserer Linux-Box wegen der Verwendung von zu vielen Websphere Message Broker-Instanzen oder so ähnlich.Warum sind Sempaphoren in Linux beschränkt?

Ein Kollege und ich fragen mich, warum das überhaupt begrenzt ist - es ist nur ein bisschen Erinnerung, oder?

Ich habe gründlich gegoogelt und nichts gefunden.

Wer weiß, warum das ist?

prost

+0

Vielleicht lohnt sich auch fragen auf [Unix & Linux Stackexchange] (http://unix.stackexchange.com/). Ich bin an einer Antwort interessiert :-) – DanFromGermany

+2

Die Anzahl der Semaphore ist standardmäßig 128, aber dies ist kein fester Wert und kann zur Laufzeit geändert werden. Siehe [diese Frage] (http://unix.stackexchange.com/questions/12746/how-do-i-increase-the-number-of-semaphore-arrays-in-linux) in [Unix & Linux] (http: // www : //unix.stackexchange.com/). –

+1

Es ist nur ein bisschen Speicher, aber dieses Bit ist im Speicher des Kernels. Du willst das so klein wie möglich halten; Sie möchten nicht, dass ein Prozess Ihre Box zum Absturz bringt, weil er mehr Semaphore erstellt hat, als Sie Speicher hatten. – chepner

Antwort

3

Semaphore, wenn erforderlich mit sehr, sehr geringen Overhead häufigen Zugriff verwendet wird. Wenn ein expandierbares System vorgesehen ist, in dem der Speicher für jede neu angeforderte Semaphorstruktur im Fluge zugewiesen wird, würde dies eine Komplexität einführen, die den Zugriff auf sie verlangsamen würde, da sie zuerst nachsehen müsste, wo der fragliche spezifische Semaphor gerade gespeichert ist , dann hole den Speicher, wo er gespeichert ist, und überprüfe den Wert. Es ist einfacher und schneller, sie in einem kompakten Block mit festem Speicher zu halten, der sofort verfügbar ist.

Wenn sie im gesamten Speicher über die dynamische Zuweisung verteilt sind, würde es auch schwieriger, Speicherseiten zu verwenden, die gesperrt sind (dh bei hohen Anforderungen an den Speicher nicht ausgelagert werden). Die Verwendung von "gesperrten" Speicherseiten für Kerneldaten ist besonders wichtig für zeitempfindliche und/oder kritische Kernelfunktionen.

Wenn das Limit ein abstimmbarer Parameter ist (siehe Links in den Kommentaren der ursprünglichen Frage), kann es zur Laufzeit bei Bedarf über eine "teure" Neuzuweisung und Verschiebung des Blocks erhöht werden. Aber typischerweise wird dies einmal bei der Systeminitialisierung durchgeführt, bevor überhaupt viel Semaphoren verwendet werden.

Das heißt, die Menge an Speicher von einem Semaphor-Set ist ziemlich klein. Mit modernstem Speicher, der auf Systemen verfügbar ist, die in den vielen Gigabytes sind, scheinen die ursprünglichen Standardgrenzen für deren Anzahl ein wenig geizig zu sein. Aber bedenken Sie, dass Semaphore auf vielen Systemen selten von User-Space-Prozessen verwendet werden und der Linux-Kernel seinen Weg in viele kleine eingebettete Systeme mit ziemlich begrenztem Speicher findet. Daher ist das Setzen der Standardgrenze beliebig hoch.

Die wenigen Softwarepakete, wie z. B. die Oracle-Datenbank, die von vielen verfügbaren Semaphoren abhängig sind, empfehlen in der Regel bei der Installation und/oder Systemoptimierung, die Systemgrenzen zu erhöhen.

Verwandte Themen