falhou ao mapear segmento do objeto compartilhado: Não é possível alocar memória

1

de manhã cedo houve uma rotação de log, a última linha no log de erros do apache foi:

 [error] (9)Bad file descriptor: apr_socket_accept: (client socket)    apache2: Syntax error on line 250 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/alias.load: Cannot load /usr/lib/apache2/modules/mod_alias.so into server: /usr/lib/apache2/modules/mod_alias.so: failed to map segment from shared object: Cannot allocate memory

O Apache não foi atualizado automaticamente depois disso. Quando eu comecei a olhar para isso uma hora depois, eu simplesmente fiz um reinício do apache e estava tudo bem. Deixou um aviso no novo arquivo de log:

[warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?

O que isso significa e como posso corrigir o que deu errado?

(Apache / 2.2.22 (Debian))

editar ou se isso não é algo que pode ser corrigido, existe uma maneira de fazer com que o apache atualize automaticamente x vezes antes de desistir (como pm2 com nó)?

    
por John 02.08.2015 / 11:45

1 resposta

4

A incapacidade de alocar a memória compartilhada é um tipo especial de animal. Isso não significa que o sistema como um todo esteja sem memória, mas sim que você atingiu um dos limites que governam a alocação de memória compartilhada.

Os dois sysctls relevantes são kernel.shmmax (que é o limite, em bytes, de quão grande um único segmento de memória compartilhada pode ser) e kernel.shmall (que é a quantidade total de memória compartilhada, em bytes, que pode ser atribuído ao sistema). Use grep Shmem /proc/meminfo; cat /proc/sys/kernel/shmall para visualizar esses valores.

Você pode saber se shmall foi atingido, comparando a linha Shmem de /proc/meminfo com /proc/sys/kernel/shmall . Se eles forem iguais, você atingiu o limite de memória compartilhada do sistema e precisará aumentar kernel.shmall (ou parar algo que tenha memória compartilhada em uso). Caso contrário, você provavelmente precisará aumentar kernel.shmmax para algo maior do que qualquer que seja o processo que a falha queira usar.

    
por 03.08.2015 / 03:15

Tags