Uso misterioso de troca no EC2

5

Estamos no meio de um projeto para mover nossa infraestrutura de uma situação comum para o Amazon EC2 e notamos algumas características estranhas de memória dos processos em nossa configuração. Sem entrar em muitos detalhes sobre as especificidades de nossos processos, notamos que em nossas instâncias do EC2 "top" mostrará processos usando muito de espaço de swap - na verdade, muito maior que o quantidade de troca disponível ou (se você adicionar tudo) mais do que o disco disponível.

Aqui está uma saída de amostra:

Mem:   7136868k total,  5272300k used,  1864568k free,   256876k buffers
Swap:  1048572k total,        0k used,  1048572k free,  2526504k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND                                                                            
 4121 jboss     20   0 5913m 603m  14m S  0.7  8.7   3:59.90 5.2g java                                                                               
22730 root      20   0 2394m 4012 1976 S  2.0  0.1   4:20.57 2.3g PassengerHelper                                                                    
20564 rails     20   0 2539m 220m 9828 S  0.3  3.2   0:23.58 2.3g java                                                                               
 1423 nscd      20   0  877m 1464  972 S  0.0  0.0   0:03.89 876m nscd                          

Você pode ver, por exemplo, que o jboss está usando 5,2 GB de espaço de troca, o que é definitivamente impossível, pois há apenas 1G alocado e nenhum está sendo usado (provavelmente porque ainda há 1,8G de RAM livre).

E aqui estão os resultados de uname -a :

Linux xxx.yyy.zzz 2.6.35.14-106.53.amzn1.x86_64 #1 SMP Fri Jan 6 16:20:10 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Estamos executando uma AMI baseada no Amazon Linux AMI padrão (Amazon Linux AMI versão 2011.09, portanto, alguns RHEL5 e RHEL 6) com muitas personalizações e sem personalizações no nível do kernel.

Algo aqui me diz que neste kernel / distribuição em particular, o relato de swap ou até mesmo o uso total de memória não é o que parece ser ...

Qualquer ajuda seria apreciada!

    
por rusty 20.03.2012 / 04:07

1 resposta

5

Na verdade, jboss está usando 5,9 GB de memória virtual e sem espaço de troca. A ferramenta top usa uma fórmula quebrada para calcular o que ela relata erroneamente como espaço de troca. Na verdade, é o resultado da subtração do tamanho do conjunto residente do tamanho do espaço de endereço. Essa é uma coisa tola, já que uma é uma medida da memória virtual e a outra é uma medida da memória física. Portanto, não está totalmente claro qual é o resultado, nem mesmo uma medida. O número é tão sem sentido quanto o dólar em falta no enigma antigo .

(Na verdade, não é completamente sem sentido. É a quantidade máxima de espaço de troca que os mapeamentos atuais do programa podem precisar se eles fossem todos sujos e o tamanho do conjunto residente do programa não mudasse. Isso é realmente muito sem sentido considere se esses mapeamentos são mesmo graváveis.)

    
por 20.03.2012 / 05:38