
Todos os sábados, por razões que desconheço, um dos meus servidores experimenta um aumento na utilização de swap. Não é necessariamente um problema, pois há bastante memória livre disponível, mas ainda assim gostaria de entender o que está acontecendo.
Em particular, estou perplexo com uma situação em que o swap passa de 2% usado para 100% usado durante um período de cerca de 20 minutos. Porém, quando isso acontece, não parece haver nenhum aumento na taxa de swap. O servidor tem uma partição swap de 8 GB, então eu esperaria uma taxa de saída de página de milhares de páginas por segundo para preencher o espaço disponível.
Além disso, não parece haver nenhum aumento na utilização da memória no momento que faça com que o servidor troque.
Alguém pode dar uma explicação para o comportamento observado? O servidor é RHEL 4.8 (antigo, eu sei) com kernel 2.6.9. Incluí algumas saídas do sar abaixo.
A utilização de swap salta de 2% para 100% em cerca de 20 minutos:
$ sar -r -f sa12
....
06:00:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
06:10:01 PM 4583856 11847032 72.10 79676 319804 8178056 207864 2.48 19816
06:20:01 PM 4720904 11709984 71.27 38840 225108 8178400 207520 2.47 19124
06:30:02 PM 4839160 11591728 70.55 1404 144948 1968152 6417768 76.53 6227068
06:40:02 PM 4827016 11603872 70.62 1640 145484 10232 8375688 99.88 8182968
06:50:02 PM 4836376 11594512 70.57 844 123304 60 8385860 100.00 8193044
07:00:01 PM 4825764 11605124 70.63 920 128108 4516 8381404 99.95 8188680
....
Aqui estão as estatísticas de troca para o mesmo período.
$ sar -W -f sa12
....
06:00:01 PM pswpin/s pswpout/s
06:10:01 PM 0.00 0.00
06:20:01 PM 0.00 0.00
06:30:02 PM 0.68 0.00
06:40:02 PM 1.85 0.00
06:50:02 PM 5.07 0.00
07:00:01 PM 8.62 0.00
....
Responder1
Fato interessante: o uso de swap aumentou de 0 para 8 GB... enquanto isso, nem um único byte foi gravado no disco (o sar pswpout/s
mostra 0). Portanto, minha suposição é que o swap foi alocado/reservado, mas não consumido/usado.
Meu melhor palpite é que seu servidor usa vm.overcommit_memory=2
(leiaDocumentação vm.overcommit_memory,vm overcommit-accounting). Nesse caso, cada byte alocado é contado como usado. [Eu não verifiquei].
Você também pode querer ler o tópicoLinux: Troca total usada = troca usada pelos processos + ??.
Responder2
Isso não responde diretamente à sua pergunta, mas o script a seguir pode ser útil na sua investigação. Ele permite saber quanto espaço de troca cada processo individual está usando:
Descubra quais processos estão usando swap
Se você tiver uma ideia aproximada de quando a troca começa, você pode configurar o cron para executar esse script nesse horário.