O uso de memória no Linux cai com frequência

2

Eu rodei uma máquina CentOS 5.6 (64 bits) que tem o Nginx (versão mais recente) rodando, com o php-fpm (versão mais recente). As coisas correm muito bem, mas desde cerca de duas semanas notei nos meus gráficos do Munin que a cada 2 horas o uso do 'cache' cai. Antes era usado como um gráfico totalmente estável, que não parecia ser redefinido de vez em quando.

Configurações do PHP-FPM:

pm.max_children = 300
daemonize = yes
pm = static
listen = /tmp/fpm.sock
pm.max_requests = 1000

Eu verifiquei o php-fpm.log, e cerca de uma vez por 5 segundos um processo filho é eliminado e reiniciado. Mas isso é o tempo todo, então isso não explica as quedas repentinas.

Eu só executo Nginx, PHP (via fpm), Munin e vsftpd nesta máquina. Nenhum crons é executado exatamente no momento das gotas.

Minha pergunta: O que poderia estar causando essas quedas no uso do cache?

    
por Mr.Boon 18.01.2012 / 18:27

3 respostas

0

Não tenho certeza sobre o CentOS 5.6, mas para o meu Linux 2.6.32-5-amd64 adicionando essa linha em /etc/sysctl.conf

vm.vfs_cache_pressure = 1

resolve esse problema.

    
por 22.01.2012 / 23:34
0

Acho que algum arquivo grande que faz parte do seu servidor é responsável. Eu estou supondo um log que é girado ou compactado como uma função de limpeza geral. Abaixo estão alguns experimentos mostrando que o Linux descarta essa parte do cache quando um arquivo é removido, inclusive por meio de um utilitário como o gzip.

$ free
             total       used       free     shared    buffers     cached
Mem:       4054352    3867292     187060          0      75664     390788
-/+ buffers/cache:    3400840     653512
Swap:      4194300     338344    3855956
# echo 1 > /proc/sys/vm/drop_caches
$ free
             total       used       free     shared    buffers     cached
Mem:       4054352    3420612     633740          0        292      20516
-/+ buffers/cache:    3399804     654548
Swap:      4194300     338344    3855956

Mas isso provavelmente não é o que está acontecendo. E se um arquivo fosse excluído? Ainda seria referenciado?

$ dd if=/dev/zero of=cachetest bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.288883 s, 726 MB/s

$ free
             total       used       free     shared    buffers     cached
Mem:       4054352    3647688     406664          0       3200     240328
-/+ buffers/cache:    3404160     650192
Swap:      4194300     338344    3855956

$ rm cachetest
$ free

             total       used       free     shared    buffers     cached
Mem:       4054352    3438508     615844          0       3208      35528
-/+ buffers/cache:    3399772     654580
Swap:      4194300     338344    3855956

E, se recarregarmos, comprima o arquivo:

$gzip cachetest
$free
             total       used       free     shared    buffers     cached
Mem:       4054352    3439412     614940          0       3384      36404
-/+ buffers/cache:    3399624     654728
Swap:      4194300     338344    3855956
    
por 19.01.2012 / 16:27
0

Resolvido, colocando vm.zone_reclaim_mode = 0

    
por 12.11.2012 / 15:23