Depurar falta de memória com /var/log/messages

Depurar falta de memória com /var/log/messages

O seguinte relatório é lançado no meu log de mensagens:

kernel: Out of memory: Kill process 9163 (mysqld) score 511 or sacrifice child
kernel: Killed process 9163, UID 27, (mysqld) total-vm:2457368kB, anon-rss:816780kB, file-rss:4kB

Não importa se esse problema é para httpd, mysqldou postfixestou curioso para saber como posso continuar depurando o problema.

Como posso obter mais informações sobre por que o PID 9163 foi eliminado e não tenho certeza se o Linux mantém o histórico dos PIDs encerrados em algum lugar.

Se isso ocorrer em seu arquivo de log de mensagens, como você solucionará esse problema passo a passo?

# free -m

             total       used       free     shared    buffers     cached
Mem:          1655        934        721          0         10         52
-/+ buffers/cache:        871        784
Swap:          109          6        103`

Responder1

O kernel terá registrado um monte de coisas antes que isso acontecesse, mas a maior parte provavelmente não estará no /var/log/messages, dependendo de como você (r)syslogdestá configurado. Tentar:

grep oom /var/log/*
grep total_vm /var/log/*

O primeiro deve aparecer várias vezes e o segundo em apenas um ou dois lugares. Esse é o arquivo que você deseja ver.

Encontre a linha original "Sem memória" em um dos arquivos que também contém total_vm. Trinta segundos a um minuto (pode ser mais, pode 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:

  • pidO ID do processo.
  • UIDID do usuário.
  • tgidID do grupo de threads.
  • total_vmUso de memória virtual (em páginas de 4 KB)
  • rsrsUso de memória residente (em páginas de 4 KB)
  • nr_ptesEntradas da tabela de páginas
  • trocasTrocar entradas
  • oom_score_adjGeralmente 0; um número menor indica que o processo terá menos probabilidade de morrer quando o assassino OOM for invocado.

Você pode principalmente ignorar nr_pteseswapents embora eu acredite que esses sejam fatores que determinam quem será morto. Este não é necessariamente o processo que usa mais memória, mas muito provavelmente é. Para saber mais sobre o processo seletivo,Veja aqui. Basicamente, o processo que termina com a pontuação mais alta é eliminado - essa é a "pontuação" relatada na linha "Sem memória"; infelizmente as outras pontuações não são relatadas, 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 emysqld foi escolhido para morrerporque matá-lo liberaria mais recursos. Isso não significa necessariamente mysqldque esteja fazendo algo errado. Você pode olhar a tabela para ver se alguma coisa saiu do controle naquele momento, mas pode não haver nenhum culpado claro: o sistema pode ficar sem memória simplesmente porque você julgou mal ou configurou mal os processos em execução.

Responder2

A chave para isso está na própria mensagem -Fora da memória. Quando o kernel do Linux fica sem memória virtual (RAM física mais swap), ele começa a eliminar processos e foi exatamente isso que aconteceu aqui. Parece que mysqldestava usando mais de 2 GB de memória virtual.

Quanta RAM e swap o sistema possui? Eu consideraria adicionar RAM extra ou, se isso não for possível, adicionar swap extra. Como uma solução rápida para pelo menos evitar que os processos sejam encerrados, você pode adicionar um arquivo de troca.

Atualizar:Observando a quantidade de RAM que você possui, você pode ver imediatamente o problema. Você tem aproximadamente 1,6 GB de RAM e 100 MB de swap, mas o MySQL está usando muito mais RAM do que isso. Isso explica por que você está vendo processos sendo encerrados.

informação relacionada