Por que meu servidor KVM, RHEL6.2 está trocando?

3

Eu tenho um servidor RHEL6.2 que estou usando para executar máquinas virtuais KVM.

O próprio servidor tem 16 GB de RAM. Eu quero ver a maior VM que eu posso rodar nela e não deixar o processo qemu-kvm ser trocado. O RAM da VM é ~ 15 GB. (Sim, percebo que isso está aumentando o limite, mas leia até o final antes de responder algo como "15GB é demais".)

[root@xxx libvirt]# virsh dumpxml VM2 | grep -i memory
  <memory>15000000</memory>
  <currentMemory>15000000</currentMemory>

[root@xxx libvirt]# ps -ef | grep kvm
root       872     1 16 10:55 ?        00:03:00 /usr/libexec/qemu-kvm [...] -m 14649 -name VM2 [...]


[root@xxx libvirt]# free -k
             total       used       free     shared    buffers     cached
Mem:      16332640   16194440     138200          0       1544      15700
-/+ buffers/cache:   16177196     155444
Swap:     35651568    7583432   28068136

Mas o RSS do processo KVM tem apenas 880 MB (coluna 6 abaixo). Espero que seja mais de 12-14 GB.

[root@xxx libvirt]# ps -eF | grep kvm
root       872     1 14 4534221 882916 7 10:55 ?       00:03:11 /usr/libexec/qemu-kvm 

E, se eu somar o RSS de todos os processos, é apenas ~ 1gig.

[root@xxx libvirt]# ps -eF | awk '{print $6}' | grep '[0-9]' | tr '\n' '+' | sed 's/+$/\n/' | bc
1004064

Aqui estão os processos que são os maiores usuários de memória (RSS, coluna 6).

root      5188 22329  0 27572  1192   4 11:19 pts/0    00:00:00 ps -eF
root     31461     1  0 10746  1236   7 Jul25 ?        00:06:22 [...]
root      6339  6275  0 272676 3288   4 Jul27 ?        00:13:38 [...]
root      2059     1  1 443909 13352  7 Jul17 ?        05:29:11 libvirtd --daemon
root       872     1 13 4534221 928300 2 10:55 ?       00:03:24 /usr/libexec/qemu-kvm [...]

Espero que cerca de 300-500 MB de memória ainda estejam disponíveis para a VM.

UPDATE

Após reiniciar a máquina, não consigo mais reproduzir isso. O sistema agora funciona como eu esperava. Aqui estão esses números esperados.

Ah, devo mencionar. Existe um programa intensivo de memória em execução na VM. Ele aloca 80% da memória total e grava continuamente números aleatórios.

RSS da VM:

[root@hb05b15 ~]# ps -eF | grep kvm
root      7330     1 97 4520362 12483728 2 11:59 ?     00:39:55 /usr/libexec/qemu-kvm [...]

Mem e números de troca:

[root@hb05b15 ~]# free -k
             total       used       free     shared    buffers     cached
Mem:      16332640   13277468    3055172          0      21064     215196
-/+ buffers/cache:   13041208    3291432
Swap:     35651568          0   35651568

Resuma o RSS para todos os processos:

[root@hb05b15 ~]# ps -eF | awk '{print $6}' | grep '[0-9]' | tr '\n' '+' | sed 's/+$/\n/' | bc
12607180
    
por Michael Closson 31.07.2012 / 17:26

2 respostas

1

Há uma grande diferença entre o swap sendo usado e a máquina ativamente trocando. O kernel se moverá mais e mais para o disco, à medida que ele receber chamadas para grandes quantidades de memória. Se o material movido para o disco não for usado com frequência, não será necessariamente um grande problema. Se os dados estão sendo constantemente trocados, geralmente há um grande problema. A medida real aqui é olhar para algo como iostat para observar quantos dados estão realmente sendo transmitidos de um lado para outro em um determinado intervalo.

Dito isso, uma VM de 15G em uma caixa de 16G provavelmente não funcionará bem. O próprio SO requer uma certa quantidade e sempre há uma porcentagem de sobrecarga para a VM. Se você está, de fato, ativamente trocando, então você pode ver melhorias substanciais apenas recuando para, digamos, 12 ou 13G.

    
por 31.07.2012 / 17:44
1

Você não tem mais memória RAM para o sistema operacional, o cache do sistema de arquivos ou qualquer outra coisa.

Não force a RAM da VM tão alto sem deixar espaço adequado.

Agora, claro, você pode desativar a troca e ver o que acontece ...

    
por 31.07.2012 / 17:44