consumo de memória crescente

Iniciado por rogerfi, 15 de Julho de 2011, 16:14

tópico anterior - próximo tópico

rogerfi

Pessoal,

tenho um Ubuntu Server 10.04 alocado na nuvem da Rackspace. Neste servidor rodo um webserver (nginx+uwsgi), que só repassa as requisições para outros servidores através de uma fila (RabbitMQ). Este servidor tem 4 processadores, 4 GB de memória física e 8 GB de swap.
Tenho notado que minha memória física está totalmente alocada, o tamanho do buffer está bem alto e - o que tem me preocupado - o uso do swap está crescendo. Abaixo a saida do vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
0  0 1898160  18736   5744 2164564    0    0     0    91  582  430  1  1 99  0
0  0 1898160  18488   5752 2164928    0    0     0    36  525  402  1  0 99  0
0  0 1898160  18240   5760 2165264    0    0     0    36  502  394  1  0 99  0
0  0 1898332  19728   5768 2163720    0   34     0   199  507  487  1  1 99  0
0  0 1898332  19324   5776 2163828    0    0     0    30  529  365  1  1 99  0
0  0 1898332  18852   5784 2164408    0    0     0   548  535  452  1  0 99  0
0  0 1898332  18124   5792 2165148    0    0     0    40  530  491  1  1 98  0
0  0 1898388  20232   5800 2163204    0   11     0   117  521  343  0  0 99  0
0  0 1898388  19588   5812 2164172    0    0     0    26  558  565  1  1 98  0
0  0 1898388  19348   5820 2164316    0    0     0    39  542  382  1  1 99  0
0  0 1898388  18984   5828 2164868    0    0     0   156  517  443  1  1 99  0
0  0 1898388  18240   5836 2165608    0    0     0    35  542  498  1  1 99  0
0  0 1898640  19604   5844 2164276    0   50     0   877  599  543  1  1 98  0
0  0 1898640  19108   5852 2164920    6    0     6    47  577  479  1  1 99  0
0  0 1898800  20224   5860 2163688    0   33     0   146  514  518  1  1 99  0


Reparei também que o mais comum são operações de swap-out, sendo que quase não ocorrem operações de swap-in. Esse comportamento é normal? O cache não deveria estar diminuindo à medida que eu preciso de memória física? Posso supor que as páginas de memória que estão indo pra swap são páginas antigas e, como não estão voltando, não estão sendo necessárias? Ainda não percebi problemas de performance nesse servidor, mas o que me preocupa é o crescente uso do swap. Ontem de manhã estava em 1GB e agora já está com 1.8 GB.
Li em algum lugar que com o comado abaixo eu consigo liberar memória física ocupada pelo cache

echo 3 > /proc/sys/vm/drop_caches

mas isso vai resolver o problema? Acho que não. Imagino que logo o cache irá crescer novamente e isso não vai fazer com que páginas que estão em swap seja alocadas em memória.

Esse comportamento é normal? Preciso me preocupar? O que fazer, nesse caso? Como monitorar eficientemente a memória?

Verifiquei outros servidores (com outras aplicações) e vi que a grande maioria tem quase nenhuma memória física disponível (normal), cache grande (normal também), mas o swap não está alterando como nesse servidor.

zekkerj

O uso de cache alto é normal, o anormal é o uso de swap crescente. É sinal de que seus processos estão crescendo em uso de memória. o que pode ser normal, se forem muitos, ou se forem processos pesados, mas pode ser sinal de um problema de vazamento de memória ("memory leak").

O comando "top" permite monitorar os processos em execução na máquina, mostrando os maiores consumidores de recurso ("top consumers", daí o nome). Normalmente ele lista os processos em ordem reversa de consumo de CPU, ou seja, os maiores consumidores de CPU no topo, mas digitando "." ou ">", você muda ele pra mostrar os maiores consumidores de memória.

Não se preocupe com os caches, eles são automaticamente liberados quando você precisa de mais memória nos processos.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D