Como descubro qual processo está usando muito da minha RAM?

3

Estou executando uma instância de cassandra em um servidor com 16 GB de RAM. O processo falhou após um erro OutOfMemory.

Agora, quando eu verifico o uso da memória, 11GB de 16GB são usados.

             total       used       free     shared    buffers     cached
Mem:         16056      11032       5024          0          4         23
-/+ buffers/cache:      11004       5052
Swap:            0          0          0

Eliminar caches por echo 1 > / proc / sys / vm / drop_caches não está ajudando.

Esta é a saída do comando top com os PIDs ordenados pelo uso da RAM:

Eu não estou entendendo quais processos estão consumindo a memória. Estou faltando alguma coisa aqui?

Como posso recuperar a memória perdida?

A seguir, o detalhe da CPU:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 44
Stepping:              2
CPU MHz:               2933.437
BogoMIPS:              5866.87
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              15360K
NUMA node0 CPU(s):     0-3

uname -a: Linux ExpressoBDAPp33133 2.6.32-431.29.2.el6.x86_64 #1 SMP Sun Jul 27 15:55:46 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux

    
por dvl 07.05.2015 / 09:09

2 respostas

1

Eu vejo que você está rodando dentro do VMware:

Hypervisor vendor:     VMware

Você deve verificar a quantidade de memória que você está alocando para cada convidado. Se você está alocando mais memória do que o host (overcommitment) e o host está ficando sem memória, ele iniciará ballooning - basicamente, ele começará a ocupar espaço nos convidados (forçando os convidados a começar a trocar) para que o hipervisor tenha mais memória para trabalhar.

Na verdade, o valor padrão do balão máximo é, supostamente, 65% da memória física do hóspede. Isso se encaixa perfeitamente com seus 11 GB de 16 GB usados.

O balão será exibido como memória usada no convidado - e como é executado por um driver do modo kernel, ele não aparecerá como um processo. Isso pode ter efeitos colaterais: se você desativou a troca, o sistema operacional convidado simplesmente recusará qualquer pedido de mais memória do que a disponível.

Note que o ballooning é um sintoma de um problema muito maior: falta de recursos no host. Não desative simplesmente o ballooning, pois isso forçará o hypervisor a começar a trocar a memória do convidado, matando completamente o desempenho. Em vez disso, você deve definir reservas de memória para esse convidado (o que forçará o hipervisor a recuperar mais memória de outros convidados) e definir algumas trocas para que ele possa trocar as páginas menos usadas de forma inteligente quando ocorrerem balões, em vez de forçar o hipervisor para fazer isso aleatoriamente.

Você também pode verificar quanta memória é "usada" pelo balão de informações de dentro do convidado . Se isso estiver ocorrendo, você precisará de mais recursos físicos - atualize o host ou distribua as VMs por mais hosts.

Veja também o white paper da VMware sobre gerenciamento de memória .

    
por 13.06.2015 / 16:28
0

A memória não está perdida e não precisa ser recuperada. Está em uso.

A memória livre é desperdiçada. Não fornece nenhum benefício. Se você está pensando "Eu quero essa memória livre agora para que possa ser usada mais tarde", isso é ridículo. Você pode usar a memória agora e usá-lo mais tarde. De fato, ter memória livre agora só dificulta o uso posterior porque, se a memória é livre, é preciso esforço para usá-la.

Não há compensações a serem feitas aqui. Você não pode usar menos RAM hoje para poder usar mais RAM amanhã. RAM não pode ser salvo. Nada está errado. Não há nada para consertar.

Os sistemas operacionais modernos apenas tornam a memória livre se não tiverem absolutamente outra escolha. Não há nenhuma vantagem em ter memória livre. Apenas a memória que está em uso fornece um benefício, e a memória livre exige esforço para ser usada.

Não pense que a memória deve estar livre para estar disponível. A grande maioria da memória usada está normalmente disponível em sistemas operacionais modernos. A memória pode ser transferida diretamente de um uso para outro sem o esforço desperdiçado de ter que liberá-la enquanto isso.

    
por 08.05.2015 / 10:41