610 Views
Tempo de leitura: 2 MinutosRecentemente 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 `ipcs -s | awk '/webserver/ {print $2}'`; 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 https://lzanuz.sites.uol.com.br/processos.htm