9/10 OO killer virá e matará o programa com o maior consumo de memória. Senão seu sistema irá falhar.
Estou assumindo que você está no Linux.
Executando o MySQL em uma caixa com 32 GB de RAM. O swap está 99% cheio e há cerca de 200 MB de RAM livres. O MySQL é o culpado, é claro. O que acontece quando a RAM e a troca estão completamente preenchidas? Obrigado!
9/10 OO killer virá e matará o programa com o maior consumo de memória. Senão seu sistema irá falhar.
Estou assumindo que você está no Linux.
Isso depende do sistema operacional, mas quando você realmente acaba, algo morre. Mais especificamente, algo diz ao sistema operacional "por favor, me dê mais memória", e o sistema operacional diz "não".
(Isso pode ser em virtude de apenas tocar em alguma memória que já foi dito foi alocado, fazendo com que a página copie-on-write, por isso não é tão simples como "chamar o alocador de memória do kernel")
Tecnicamente, o processo poderia lidar com essas falhas e se recuperar, mas praticamente resulta em um travamento.
O Linux tenta adivinhar o que é um bom candidato a matar, e acho que o Windows faz o mesmo, antes de você chegar a esse estado - mate algo marginalmente mais limpo para que a memória seja liberada.
Como a RAM livre é um desperdício de memória RAM, o Linux tenta usar o máximo possível. É possível que existam muitas páginas de disco em cache e outras coisas mantidas na RAM apenas porque havia espaço. Execute free -m
para ver como a RAM é usada em sua máquina. Ele também mostrará o número de megas que podem ser usadas pelos aplicativos, se necessário (coluna 'livre', segunda linha).
Abra algumas sessões ssh sobressalentes para o host até que não seja tarde demais. Quando o sistema não tem RAM / swap livre, nenhum novo processo pode ser iniciado.
Parece que alguma consulta produz uma quantidade inesperada de dados armazenados na (s) tabela (s) temporária (s) - na memória. Tente matar o thread mais antigo lançado pelo mysql:
SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, LEFT(INFO, 51200) AS Info FROM information_schema.PROCESSLIST;
Campo TIME mostra os segundos que o mysql gastou realizando a consulta. Aqueles com maior TEMPO são os culpados.
Tente implantar um agente personalizado, como o New Relic, para ver quais processos são desnecessários e começar a eliminá-los. Isso pode salvar seu servidor de travar