O kernel registrou um monte de coisas antes que isso acontecesse, mas a maior parte provavelmente não estará em /var/log/messages
, dependendo de como o (r)syslogd
está configurado. Experimente:
grep oom /var/log/*
grep total_vm /var/log/*
O primeiro deve aparecer várias vezes e o último em apenas um ou dois lugares. Esse é o arquivo que você quer ver.
Encontre a linha original "Falta de memória" em um dos arquivos que também contém total_vm
. Trinta segundos a um minuto (poderia ser mais, poderia ser menos) antes dessa linha você encontrará algo como:
kernel: foobar invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Você também deve encontrar uma tabela em algum lugar entre essa linha e a linha "Sem memória" com cabeçalhos como este:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
Isso pode não dizer muito mais do que você já sabe, mas os campos são:
- pid O ID do processo.
- uid ID do usuário.
- tgid ID do grupo de tópicos.
- total_vm Uso de memória virtual (em páginas de 4 kB)
- rss Uso de memória residente (em páginas de 4 kB)
- nr_ptes Entradas da tabela de páginas
- swapents Entradas de swap
- oom_score_adj Geralmente 0; um número menor indica que o processo terá menor probabilidade de morrer quando o killer da OOM for invocado.
Você pode ignorar principalmente nr_ptes
e swapents
, embora eu acredite que esses fatores determinam quem é morto. Isso não é necessariamente o processo que usa mais memória, mas é muito provável que seja. Para mais informações sobre o processo de seleção, veja aqui . Basicamente, o processo que termina com a pontuação mais alta é morto - essa é a "pontuação" informada na linha "Sem memória"; infelizmente as outras pontuações não são reportadas, mas essa tabela fornece algumas pistas em termos de fatores.
Novamente, isso provavelmente não fará muito mais do que esclarecer o óbvio: o sistema ficou sem memória e mysqld
foi escolhido para morrer porque matá-lo liberaria a maioria dos recursos . Isso não significa necessariamente mysqld
está fazendo algo errado. Você pode olhar a tabela para ver se alguma outra coisa saiu da linha no momento, mas pode não haver nenhum culpado claro: o sistema pode ficar sem memória simplesmente porque você julgou mal ou configurou incorretamente os processos em execução.