Estou usando muita memória? (Trilhos no EC2 com Resque)

2

Eu estou olhando para o uso de memória do aplicativo Rails (ele usa processos em segundo plano via Resque) e desde que a resposta comum para a pergunta, "quantos trabalhadores é demais" foi "testar e ver", eu corri alguma memória comandos e me pergunto se alguém pode ajudar a descobrir se o uso de memória já é alto o suficiente, ou ainda posso adicionar alguns funcionários extras.

(tudo isso está abaixo da carga máxima):

$ free -t -m
                 total       used       free     shared    buffers     cached
    Mem:          1756       1532        223          0         12        229
    -/+ buffers/cache:       1291        464
    Swap:          895         10        885
    Total:        2652       1543       1108

$ 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  10588 156172  13400 326476    1    6     4     0    5    4  1  0 99  0

Se houver alguma informação extra que eu possa fornecer para ajudar a responder isso, eu ficaria feliz em fazê-lo. Se a pergunta é estranha de alguma forma, por favor, deixe-me saber que eu ficaria feliz em corrigir, etc.

    
por Stpn 08.06.2012 / 20:47

3 respostas

3

Obviamente, se você está ativamente trocando, você tem muitos. Trocar uso não significa que você está ativamente trocando. Trocar E / S significa que você está ativamente trocando.

No entanto, a troca ativa não é a única maneira de o uso excessivo da memória do aplicativo prejudicar você. Cada byte de memória que os aplicativos estão usando ativamente é um byte de memória que não pode ser usado como um cache de disco. Se o seu aplicativo não tocar muito no disco, isso não importará. Mas se isso acontecer, você poderá sofrer um desempenho muito ruim devido a uma baixa taxa de acertos do cache, mesmo se não houver troca.

A primeira coisa a observar é quanta memória é livre ou usada como cache. Se isso é muito baixo, então você corre o risco de trocar. Neste caso, isso é aproximadamente 400MB. Então você não corre o risco de trocar.

A segunda coisa a considerar é se o cache de disco é adequado para o seu aplicativo. Um ponto fixo é se deve contar a memória livre como parte do cache de disco. No seu caso, a memória livre é provavelmente necessária para a rotatividade de memória. Ou seja, ele não pode ser usado como cache de disco, pois o cache é constantemente reduzido à medida que o uso de memória do aplicativo aumenta e diminui. Então, seu cache de disco tem cerca de 200MB.

Se isso é suficiente, depende de como seu aplicativo usa o disco. Mas se não for, a distribuição será excessiva de E / S e desempenho ruim.

    
por 08.06.2012 / 23:01
2

Você deve verificar o arquivo / proc / meminfo. Ele contém respostas detalhadas do que você está procurando. Tenha em mente que cache e buffer são essencialmente livres de memória, bloqueando páginas sujas no cache.

Quando um arquivo é lido do disco, ele é armazenado em cache na memória. Existem duas cópias do mesmo arquivo no sistema, uma é armazenada em cache e a outra em disco. Portanto, quando há necessidade de recuperar a memória, é mais fácil limpar o cache do que limpar a memória da placa ou trocar.

No seu cenário, há um pouco de swap. Trocar não é ruim, a menos que vá para a situação de surra. Você não parece ter uma crise de recursos na memória e seria bom se você pudesse capturar a saída / arquitetura do sistema / proc / meminfo quando o uso do sistema estivesse no nível mais alto.

    
por 09.06.2012 / 15:38
1

Do que você indica, vejo uma pequena evidência de troca, mas não muito alta no instantâneo. Eu poderia parar na configuração que você está usando atualmente e recuar um pouco. Uma coisa que você realmente quer evitar é trocar, onde é basicamente o esgotamento da memória.

    
por 08.06.2012 / 20:51