¿Qué son los semáforos y cómo se causan?

8

Recientemente comencé a tener el problema de que mi Apache se bloqueó y no se pudo reiniciar. La compañía de hosting me dijo que tiene que ver con 'semáforos' y me envió este recorte con el que resolvieron el problema:

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

Ahora, es bueno tener un comando para ejecutar que resuelva mi problema, pero de nuevo no tengo idea de qué se trata todo esto.

¿Qué son los semáforos y quién los pone, dónde están y cómo estrellan mi apache?

Me alegraría mucho por algunas explicaciones generales!

Markus
fuente

Respuestas:

9

Como otros han dicho, los semáforos son IPC (estructuras de comunicaciones entre procesos). Los semáforos como todos los IPC se utilizan para permitir que diferentes procesos se comuniquen entre sí.

Básicamente son contadores que se crean, acceden y destruyen utilizando llamadas especiales del sistema, como sempost (3), semwait (3), semget (2) y semop (2). Ver sem_overview (7) en un sistema Linux para una breve descripción.

La definición de comunicar aquí es bastante primitiva. "Comunicar" para semáforos significa leer, aumentar o disminuir un contador a través de las llamadas al sistema / biblioteca mencionadas anteriormente.

Lo especial de los semáforos, aparte del hecho de que son, es que solo un proceso a la vez puede realizar una operación en ellos, y las operaciones de semáforos están garantizadas atómicas , es decir, no se puede entrar en una condición de carrera durante un semáforo ya que el núcleo no intercambiará un proceso que está realizando una operación de semáforo.

La otra cosa especial es que se crean en la memoria compartida, lo que permite que múltiples procesos accedan a ellos.

La forma en que se manifiestan / crean es que los programas los crean usando semget (2). Por ejemplo, apache crea sempahores cuando se ejecuta.

ipcs -l le informará sobre los recursos ipc del sistema.

Puede manipular algunos límites relacionados con el semáforo del sistema y el IPC con sysctls. Trate sysctl kernel.semde ver la configuración relacionada con Sempahore mediante sysctl. Si desea persistir cualquier cambio de sysctl, intente ponerlos /etc/sysctl.conf.

Jason Tan
fuente
4

Los semáforos son una forma de comunicación entre procesos (ipc en ipcrm). Los proporciona el sistema operativo y los desarrolladores de Apache los utilizan para la comunicación entre diferentes procesos de Apache. Es poco probable que sean la causa del bloqueo de Apache, pero no se liberan cuando se bloquea, evitando que se inicien nuevas instancias de Apache.

Wikipedia: Semáforo (programación)

pgs
fuente
También hay un hilo sobre el tema en StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
James Sneeringer
Hay un error en su URL ... La URL no tiene el derecho) Parece ser un error en el software Serverfault ...
tegbains
grumble Obtiene la URL correcta en la vista previa y la suelta) cuando la guardo.
pgs
Gracias hasta ahora ¿Pero qué son, cómo se manifiestan? ¿Son archivos, entradas en un registro? ¿Qué tienen que ver con la memoria? ¿Pueden ser causados ​​por una mala programación de php (como me dijo mi empresa de hosting)?
markus
Son memoria compartida y estructuras del núcleo. PHP no es seguro para subprocesos, por lo que debería usar el módulo de preprocesamiento multiproceso de Apache2.
pgs