O kernel já registrou várias coisas antes que isso acontecesse, mas a maioria provavelmente não estará presente /var/log/messages
, dependendo de como o seu (r)syslogd
está configurado. Experimentar:
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ê deseja examinar.
Encontre a linha "Sem memória" original 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 "Memória insuficiente" com cabeçalhos como este:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
Isso pode não lhe dizer muito mais do que você já sabe, mas os campos são:
- pid O ID do processo.
- ID do usuário uid .
- tgid ID do grupo de encadeamentos .
- 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 Normalmente 0; um número menor indica que o processo terá menos probabilidade de morrer quando o assassino do OOM for invocado.
Você pode ignorar nr_ptes
e, swapents
apesar de acreditar que esses são fatores para determinar quem é morto. Este não é necessariamente o processo que utiliza mais memória, mas é muito provável que seja. Para mais informações sobre o processo de seleção, clique aqui . Basicamente, o processo que termina com a maior pontuação final é eliminado - essa é a "pontuação" relatada na linha "Memória insuficiente"; infelizmente, as outras pontuações não são relatadas, mas essa tabela fornece algumas dicas 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 mais recursos . Isso não significa necessário mysqld
está fazendo algo errado. Você pode olhar para a tabela para ver se havia algo errado na época, mas pode não haver nenhum culpado: o sistema pode ficar sem memória simplesmente porque você julgou mal ou configurou incorretamente os processos em execução.
dmesg
?