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

8

Recentemente, comecei a ter o problema que meu Apache caiu e não pôde ser reiniciado. A empresa de hospedagem, em seguida, me disse que tem a ver com 'semáforos' e me enviou este recorte com o qual eles resolveram o problema:

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

Agora, é legal ter um comando para executar que resolva meu problema, mas, novamente, não tenho ideia do que é isso.

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

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

    
por markus 07.05.2010 / 07:27

2 respostas

7

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

Eles são basicamente contadores que são 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 é bem primitiva. "Comunicar" para semáforos significa ler, incrementar ou decrementar um contador através das chamadas do sistema / biblioteca mencionadas acima.

A coisa especial sobre 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 sobre um semáforo, pois o kernel não irá trocar um processo que está 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 / criam é que os programas os criam usando semget (2). Por exemplo. o apache cria sempahores quando é executado.

ipcs -l irá informá-lo sobre os recursos de ipc do sistema.

Você pode manipular alguns limites relacionados ao semáforo de sistema e ipc com sysctls. Tente sysctl kernel.sem para visualizar as configurações relacionadas ao sempahore via sysctl. Se você quiser persistir quaisquer alterações sysctl, tente colocá-las em /etc/sysctl.conf .

    
por 10.05.2010 / 15:30
4

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 utilizam para comunicação entre diferentes processos do Apache. É improvável que eles sejam a causa do travamento do Apache, mas eles não são liberados quando ele falha, impedindo que novas instâncias do Apache sejam iniciadas.

Wikipedia: Semáforo (programação)

    
por 07.05.2010 / 07:49

Tags