O que são semáforos e como eles são causados?

8

Recentemente, comecei a ter o problema de que meu Apache travava e não podia ser reiniciado. A empresa de hospedagem me disse que isso tem a ver com 'semáforos' e me enviou este fragmento com o qual resolveu o problema:

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

Agora, é bom ter um comando para executar que resolva meu problema, mas, novamente, não tenho idéia do que se trata.

O que são semáforos e quem diabos os coloca, onde eles estão e como eles quebram meu apache?

Eu ficaria muito feliz por algumas explicações gerais!

markus
fonte

Respostas:

9

Como outros já disseram, os semáforos são IPC (estruturas de comunicação entre processos). Semáforos como todo IPC são usados ​​para permitir que diferentes processos se comuniquem.

Eles são basicamente contadores criados, acessados ​​e destruídos usando chamadas especiais do sistema, como sempost (3), semwait (3), semget (2) e semop (2). Veja sem_overview (7) em um sistema Linux para uma breve descrição.

A definição de comunicação aqui é bastante primitiva. "Comunicar" para semáforos significa ler, aumentar ou diminuir um contador através das chamadas de sistema / biblioteca mencionadas acima.

O aspecto especial dos semáforos, além do fato de que eles são, é que apenas um processo de cada vez pode executar uma operação neles, e as operações do semáforo são garantidas atômicas , ou seja, você não pode entrar em uma condição de corrida por um período. semáforo como o kernel não trocará um processo que esteja executando uma operação de semáforo.

A outra coisa especial é que eles são criados na memória compartilhada, o que permite que vários processos os acessem.

Como eles se manifestam / criaram é que os programas os criam usando semget (2). Por exemplo, o apache cria sempahores quando é executado.

ipcs -l informará sobre os recursos ipc do sistema.

Você pode manipular alguns limites relacionados ao semáforo e ao ipc do sistema com sysctls. Tente sysctl kernel.semvisualizar as configurações relacionadas ao sempahore via sysctl. Se você deseja persistir qualquer alteração sysctl, tente colocá-las /etc/sysctl.conf.

Jason Tan
fonte
4

Os semáforos são uma forma de comunicação entre processos (o ipc no ipcrm). Eles são fornecidos pelo sistema operacional e os desenvolvedores do Apache os usam para comunicação entre diferentes processos do Apache. É improvável que sejam a causa do travamento do Apache, mas não são liberados quando travam, impedindo o início de novas instâncias do Apache.

Wikipedia: Semáforo (programação)

pgs
fonte
Há também uma discussão sobre o assunto ao longo de StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
James Sneeringer
Há um erro em sua URL .. O URL está faltando à direita) Parece ser um bug no software Serverfault ...
tegbains
resmungar Obtém o URL certo na visualização e solta o) quando eu o salvo.
Pg
Obrigado até agora. Mas o que são, como se manifestam? São arquivos, entradas em um log? O que eles têm a ver com a memória? Eles podem ser causados ​​por programação php incorreta (como minha empresa de hospedagem me disse)?
Markus
Eles são estruturas de memória e kernel compartilhadas. O PHP não é seguro para threads, portanto você deve usar o módulo de multiprocessamento pré-fork do Apache2.
Pg