Que sont les sémaphores et comment sont-ils causés?

8

J'ai récemment commencé à avoir le problème que mon Apache s'est écrasé et n'a pas pu être redémarré. L'hébergeur m'a alors dit que cela avait à voir avec les «sémaphores» et m'a envoyé cette coupure avec laquelle ils ont résolu le problème:

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

C'est bien d'avoir une commande à exécuter qui résout mon problème, mais là encore, je n'ai aucune idée de ce dont il s'agit.

Quels sont les sémaphores et qui diable les met, où ils sont et comment font-ils planter mon apache?

Je serais vraiment content de quelques explications générales!

Markus
la source

Réponses:

9

Comme d'autres l'ont dit, les sémaphores sont IPC (structures de communication interprocessus). Les sémaphores comme tous les IPC sont utilisés pour permettre à différents processus de communiquer entre eux.

Ce sont essentiellement des compteurs créés, accessibles et détruits à l'aide d'appels système spéciaux, tels que sempost (3), semwait (3), semget (2) et semop (2). Voir sem_overview (7) sur un système Linux pour une brève description.

La définition de communiquer ici est assez primitive. "Communiquer" pour les sémaphores signifie lire, incrémenter ou décrémenter un compteur via les appels système / bibliothèque mentionnés ci-dessus.

La particularité des sémaphores, en dehors du fait qu’ils le sont, est qu’un seul processus à la fois peut effectuer une opération sur eux, et que les opérations de sémaphore sont garanties atomiques , c’est-à-dire que vous ne pouvez pas entrer dans une condition de concurrence sémaphore car le noyau n'échangera pas un processus qui effectue une opération de sémaphore.

L'autre particularité est qu'ils sont créés en mémoire partagée ce qui permet à plusieurs processus d'y accéder.

La façon dont ils se manifestent / créent est que les programmes les créent à l'aide de semget (2). Par exemple, apache crée des sempahores lors de son exécution.

ipcs -l vous indiquera les ressources ipc du système.

Vous pouvez manipuler des sémaphores système et des limites liées à ipc avec sysctls. Essayez sysctl kernel.semd'afficher les paramètres liés à sempahore via sysctl. Si vous souhaitez conserver les modifications sysctl, essayez de les insérer /etc/sysctl.conf.

Jason Tan
la source
4

Les sémaphores sont une forme de communitaction inter-processus (l'ipc dans ipcrm). Ils sont fournis par le système d'exploitation et les développeurs d'Apache les utilisent pour la communication entre les différents processus Apache. Il est peu probable qu'ils soient à l'origine du plantage d'Apache, mais ils ne sont pas publiés lorsqu'il se bloque, ce qui empêche le démarrage de nouvelles instances d'Apache.

Wikipédia: Sémaphore (programmation)

pgs
la source
Il y a aussi un fil sur le sujet sur StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
James Sneeringer
Il y a une erreur dans votre URL .. L'URL manque à droite) Il semble que ce soit un bug dans le logiciel Serverfault ...
tegbains
grognement Il obtient l'URL directement dans l'aperçu et supprime le) lorsque je l'enregistre.
pages
Merci jusqu'ici. Mais que sont-ils, comment se manifestent-ils? S'agit-il de fichiers, d'entrées dans un journal? Qu'est-ce qu'ils ont à voir avec la mémoire? Peut-il être causé par une mauvaise programmation php (comme me l'a dit mon hébergeur)?
Markus
Ce sont des structures de mémoire partagée et de noyau. PHP n'est pas thread-safe, vous devez donc utiliser le module de multi-traitement préfork d'Apache2.
pages