Acompanhamento de um enorme uso de buffer no Linux

5

Eu tenho um servidor Linux rodando sob o Debian Lenny com 4Go de RAM. Não funciona muito, apenas:

  • Postfix / spamassassin (modo daemon)
  • Bind9
  • KVM (um convidado - 1Go de RAM para ele)

Todos os dias exatamente às 3:05 UTC, o servidor desce completamente para o andar térreo quase toda a sua memória. Depois disso, eu tenho mais do que 2G usado pelo buffer e nunca limpo (a menos que eu diga manualmente ao kernel para remover o cache).

Eu pesquisei muito na web e, no início, pensei que isso fosse devido ao uso do buffer do NFS. Eu faço backups em uma unidade de compartilhamento NFS usando gzip / tar e o backup ocorreu às 3:05.

No entanto, estou agora em uma situação muito estranha porque mudei a tarefa de backup para 1:40 (ela completa em 2 minutos) e ainda deixo cair toda a RAM às 3:05.

Nos meus logs, nada em particular, exceto que às 03:05:01, cron abre uma sessão como root e imediatamente fecha às 03:05:02 sem fazer nada. É claro que o cron foi reiniciado e verifiquei o tempo das tarefas - mais uma vez, nada em particular.

Alguma idéia de por que isso acontece? Ou alguma ideia sobre como rastrear o que está usando todos esses buffers?

Editar : O servidor está sendo executado no UTC, todas as vezes aqui são UTC. Não está executando nenhum servidor NFS e não tenho mlocate ou slocate instalado. Para crontab, crontabs diários e de usuário, nada é feito a essa hora.

Aqui está a parte interessante em meus logs sobre o cron:

auth.log-20110501:May 1 03:05:01 SRV CRON[15914]: pam_unix(cron:session): session opened for user root by (uid=0)
auth.log-20110501:May 1 03:05:01 SRV CRON[15914]: pam_unix(cron:session): session closed for user root
syslog-20110501:May 1 03:05:01 SRV /USR/SBIN/CRON[15915]: (root) CMD ([ -x /usr/lib/sysstat/sa1 ] && { [ -r "$DEFAULT" ] && . "$DEFAULT" ; [ "$ENABLED" = "true" ] && exec /usr/lib/sysstat/sa1 $SA1_OPTIONS 1 1 ; })

    
por Henry-Nicolas Tourneur 30.04.2011 / 13:00

1 resposta

1

O seu servidor está executando no UTC? A maioria funcionaria em um fuso horário local, que eu suponho ser UTC + 1 (MET ou CET) para você. Eu pergunto porque precisamos saber que fuso horário é usado no crontab, por exemplo talvez o 3.05 não seja chamado 3.05 no crontab.

As tarefas comuns que fazem muito acesso ao disco incluem makewhatis / man-db e slocate / mlocate . Verifique novamente que eles não estão sendo executados em torno de 3,05, por exemplo veja /etc/crontab e /etc/cron.daily . Verifique as guias cron do usuário em /var/spool/cron .

Há duas maneiras em que posso pensar para descobrir o que está sendo executado na versão 3.05 sem os registros do cron.

O primeiro é auditctl , o que é um pouco doloroso de usar.

Com base na página man, eu tentaria algo como:

$ sudo auditctl -a entry,always -S open -S creat \
    -S read -S readv -S write -S writev -S sendfile \
    -S fork -S clone -S execve -k 305

para configurar a auditoria e, em seguida,

$ sudo aureport -s -i -ts 03:04 -te 03:06

quando você faz o login no sistema após o 3.05 para verificar o que aconteceu.

O segundo é um simples ps . Basta escrever um script para executar ps várias vezes e programá-lo para ser executado em 3.04.

Muitos aspectos de ps podem ser úteis aqui, por exemplo, wchan e status campos para ver quais processos estão fazendo E / S e pcpu para ver quais processos estão usando mais CPU no momento . Naturalmente, qualquer processo que não apareça na lista em 3.04.59, mas que apareça em ou logo após 3.05.01, também é um suspeito óbvio.

    
por 01.05.2011 / 04:57