Artigos > Erro ao subir o httpd (Apache) no Linux

Recentemente me deparei com a seguinte mensagem de erro ao tentar subir o Apache em um servidor Linux:

No space left on device: Couldn’t create accept lock

O problema foi causado pelo deadlock de processos webserver no Semaphores. Semaphore what?

Um semáforo é uma localização em memória cujo valor pode ser testado e pode ser fixado por mais de um processo. Dependendo do resultado do teste, um processo pode ter que dormir até o valor do semáforo ser mudado por outro processo.

Há um problema em semáforos, o deadlock. Estes ocorrem quando um processo altera o valor do semáforo e entra na região crítica, mas ocorre uma falha na saída da região por que ele foi danificado ou morto. O Linux mantém a lista de ajustes dos arrays de semáforos.

Para consultar a lista dos arrays, usa-se o comando:

ipcs -s

No meu caso, esta foi a saída que obtive:

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x000000a7 0          root      600        1         
0x00000000 7471105    webserver 600        1         
0x00000000 8388610    webserver 600        1         
0x00000000 11763715   webserver 600        1         
0x00000000 11829252   webserver 600        1         
0x00000000 11894789   webserver 600        1         
0x00000000 11960326   webserver 600        1         
0x00000000 12025863   webserver 600        1         
0x00000000 12091400   webserver 600        1         
0x00000000 12156937   webserver 600        1         
0x00000000 12222474   webserver 600        1

A solução foi limpar o Semaphores com:

for x in <code>ipcs -s | awk '/webserver/ {print $2}'</code>; do (ipcrm -s $x); done

Uma vez que nenhum processo webserver restou no Semaphores, bastou subir o Apache.

service httpd start

Mais detalhes sobre Semaphores em http://lzanuz.sites.uol.com.br/processos.htm

Deixe uma resposta

This site uses Akismet to reduce spam. Learn how your comment data is processed.