Was sind Semaphoren und wie werden sie verursacht?

8

Ich hatte kürzlich das Problem, dass mein Apache abgestürzt ist und nicht neu gestartet werden konnte. Die Hosting-Firma sagte mir dann, dass es mit "Semaphoren" zu tun hat und schickte mir diesen Ausschnitt, mit dem sie das Problem lösten:

/usr/bin/ipcrm sem $(/usr/bin/ipcs -s | grep www-data | awk '{print$2}')

Nun, es ist schön, einen Befehl zum Ausführen zu haben, der mein Problem löst, aber andererseits habe ich keine Ahnung, worum es geht.

Was sind Semaphoren und wer zum Teufel bringt sie, wo sie sind und wie stürzen sie meinen Apachen ab?

Ich würde mich sehr über einige allgemeine Erklärungen freuen!

Markus
quelle

Antworten:

9

Wie andere gesagt haben, sind Semaphoren IPC (Interprozess-Kommunikationsstrukturen). Semaphoren wie alle IPC werden verwendet, um die Kommunikation verschiedener Prozesse zu ermöglichen.

Es handelt sich im Grunde genommen um Zähler, die mithilfe spezieller Systemaufrufe wie Sempost (3), Semwait (3), Semget (2) und Semop (2) erstellt, abgerufen und zerstört werden. Eine kurze Beschreibung finden Sie unter sem_overview (7) auf einem Linux-System.

Die Definition von Kommunikation hier ist ziemlich primitiv. "Kommunizieren" für Semaphore bedeutet das Lesen, Inkrementieren oder Dekrementieren eines Zählers über die oben genannten System- / Bibliotheksaufrufe.

Das Besondere an Semaphoren, abgesehen von der Tatsache, dass sie es sind, ist, dass jeweils nur ein Prozess eine Operation an ihnen ausführen kann und die Semaphoroperationen atomar garantiert sind , das heißt, Sie können nicht über a in einen Race-Zustand geraten Semaphor, da der Kernel einen Prozess, der eine Semaphoroperation ausführt, nicht austauscht.

Das andere Besondere ist, dass sie im gemeinsamen Speicher erstellt werden, sodass mehrere Prozesse auf sie zugreifen können.

Wie sie sich manifestieren / erstellen, ist, dass Programme sie mit semget (2) erstellen. ZB Apache erstellt Sempahores, wenn es ausgeführt wird.

ipcs -l informiert Sie über die IPC-Ressourcen des Systems.

Sie können einige System-Semaphor- und IPC-bezogene Grenzwerte mit sysctls bearbeiten. Versuchen Sie sysctl kernel.sem, die sempahore-bezogenen Einstellungen über sysctl anzuzeigen. Wenn Sie sysctl-Änderungen beibehalten möchten, versuchen Sie, sie zu übernehmen /etc/sysctl.conf.

Jason Tan
quelle
4

Semaphoren sind eine Form der prozessübergreifenden Kommunikation (der ipc in ipcrm). Sie werden vom Betriebssystem bereitgestellt und von den Entwicklern von Apache für die Kommunikation zwischen verschiedenen Apache-Prozessen verwendet. Es ist unwahrscheinlich, dass sie die Ursache für den Absturz von Apache sind. Sie werden jedoch nicht freigegeben, wenn sie abstürzen, sodass neue Instanzen von Apache nicht gestartet werden können.

Wikipedia: Semaphor (Programmierung)

pgs
quelle
Es gibt auch einen Thread zu diesem Thema auf StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
James Sneeringer
Es gibt einen Fehler in Ihrer URL. Die URL fehlt rechts) Es scheint ein Fehler in der Serverfault-Software zu sein ...
Tegbains
murren Es bekommt die URL direkt in der Vorschau und löscht die), wenn ich sie speichere.
Seiten
Vielen Dank bisher. Aber was sind sie, wie manifestieren sie sich? Sind es Dateien, Einträge in einem Protokoll? Was haben sie mit dem Gedächtnis zu tun? Können sie durch schlechte PHP-Programmierung verursacht werden (wie mir meine Hosting-Firma sagte)?
Markus
Sie sind Shared Memory- und Kernel-Strukturen. PHP ist nicht threadsicher, daher sollten Sie das Prefork-Multiverarbeitungsmodul von Apache2 verwenden.
Seiten