Cosa sono i semafori e come sono causati?


8

Di recente ho iniziato ad avere il problema che il mio Apache si è bloccato e non è stato possibile riavviarlo. La società di hosting poi mi ha detto che ha a che fare con i "semafori" e mi ha inviato questo frammento con cui hanno risolto il problema:

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

Ora è bello avere un comando da eseguire che risolva il mio problema, ma di nuovo non ho idea di cosa si tratti.

Che cosa sono i semafori e chi diamine li colloca, dove sono e come si rompono il mio apache?

Sarei davvero felice per alcune spiegazioni generali!

Risposte:


9

Come altri hanno già detto i semafori sono IPC (strutture di comunicazione tra processi). I semafori come tutti gli IPC vengono utilizzati per consentire a processi diversi di comunicare tra loro.

Sono fondamentalmente contatori che vengono creati, accessibili e distrutti utilizzando chiamate di sistema speciali, come sempost (3), semwait (3), semget (2) e semop (2). Vedi sem_overview (7) su un sistema Linux per una breve descrizione.

La definizione di comunicare qui è piuttosto primitiva. "Comunicare" per i semafori significa leggere, incrementare o decrementare un contatore tramite le chiamate di sistema / libreria sopra menzionate.

La particolarità dei semafori, a parte il fatto che sono, è che solo un processo alla volta può eseguire un'operazione su di essi, e le operazioni dei semafori sono garantite atomicamente , vale a dire che non è possibile entrare in una condizione di competizione su un semaforo come il kernel non sostituirà un processo che sta eseguendo un'operazione semaforo.

L'altra cosa speciale è che sono creati nella memoria condivisa che consente a più processi di accedervi.

Il modo in cui si manifestano / creano è che i programmi li creano usando semget (2). Ad esempio apache crea sempahores quando viene eseguito.

ipcs -l ti parlerà delle risorse ipc del sistema.

È possibile manipolare alcuni limiti relativi al semaforo di sistema e all'ipc con sysctls. Prova sysctl kernel.sema visualizzare le impostazioni relative a sempahore tramite sysctl. Se si desidera persistere eventuali modifiche sysctl, provare a inserirle /etc/sysctl.conf.


4

I semafori sono una forma di comunità tra processi (l'ipc in ipcrm). Sono forniti dal sistema operativo e gli sviluppatori di Apache li usano per la comunicazione tra i diversi processi Apache. È improbabile che siano la causa del crash di Apache, ma non vengono rilasciati quando si blocca, impedendo l'avvio di nuove istanze di Apache.

Wikipedia: Semaphore (programmazione)


C'è anche una discussione sull'argomento su StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
James Sneeringer

Si è verificato un errore nel tuo URL. L'URL non è presente correttamente. Sembra essere un bug nel software Serverfault ...
tegbains

grumble Ottiene l'URL proprio nell'anteprima e rilascia) quando lo salvo.
pg

Grazie finora. Ma cosa sono, come si manifestano? Sono file, voci in un registro? Cosa hanno a che fare con la memoria? Possono essere causati da una cattiva programmazione php (come mi ha detto la mia società di hosting)?
markus

Sono strutture di memoria e kernel condivise. PHP non è thread-safe, quindi dovresti usare il modulo multi-elaborazione prefork di Apache2.
pg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.