Uso da memória do Linux

3

Temos tido alguns problemas de uso de memória do Linux em alguns de nossos servidores. free, top, ps e vmstat estão todos mostrando 261M de 1G (~ 25%). No entanto, somando a quantidade de memória mostrada por processo na parte superior, mostramos que deveríamos estar usando muito pouca memória. O cache tem apenas cerca de 48M e 0K no buffer, o que torna a memória total disponível 309M, ainda consideravelmente menor do que deveríamos ter. Incluímos uma captura de tela de nossa principal saída no link (classificado por memória). Este é o meu primeiro post no serverfault, então não pude incluir a imagem no meu post :-P

Depois de tentar várias pesquisas no Google, não estou mais longe do que estava. A maioria dos resultados me disse a mesma coisa, a memória está sendo usada para cache e buffers (que eu já sabia). Mas top e free claramente não mostram isso. Qualquer ajuda é muito apreciada.

Obrigado,
JamesArmes

Atualização:
Estou incluindo nosso / proc / meminfo de uma ocorrência mais recente desse problema:

MemTotal:      1028636 kB
MemFree:         30056 kB
Buffers:             0 kB
Cached:          28732 kB
SwapCached:     154684 kB
Active:         265328 kB
Inactive:        19416 kB
SwapTotal:     2097144 kB
SwapFree:      1758196 kB
Dirty:              36 kB
Writeback:           0 kB
AnonPages:      240260 kB
Mapped:          11996 kB
Slab:            23008 kB
SReclaimable:    11976 kB
SUnreclaim:      11032 kB
PageTables:       5636 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   2611460 kB
Committed_AS:  1099080 kB
VmallocTotal: 34359738367 kB
VmallocUsed:      7204 kB
VmallocChunk: 34359731091 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
HugePages_Surp:      0
Hugepagesize:     2048 kB

Abaixo está o nosso /etc/sysctl.conf (com todas as linhas comentadas removidas):

kernel.printk = 4 4 1 7                            
kernel.maps_protect = 1                                            
fs.inotify.max_user_watches = 524288
vm.mmap_min_addr = 65536
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

Espero que isso ajude.

    
por JamesArmes 29.10.2009 / 15:58

4 respostas

3

Como vejo o vmware-guestd em execução, presumo que isso seja uma VM. Assumindo o ESX, entre no VIC e clique com o botão direito do mouse na máquina. Clique em Edit Settings... e selecione a guia Resources . Clique em Memory e verifique se Unlimited está marcado em Limit .

O que provavelmente está acontecendo é que você tem um limite na memória e quando a máquina usa muita memória (aproxima-se ou excede o limite), as ferramentas guest do vmware mantêm a memória "usada" em vez de liberá-la de volta para o ESX , caso seja necessário novamente.

ATUALIZAÇÃO:

"O servidor permite que você ligue uma máquina virtual somente se a reserva da CPU e da memória for disponível ... Quando os recursos não são usados, o host do ESX Server os disponibiliza para outras máquinas virtuais. "

link

Ele faz isso por meio do driver "balloon" (vmmemctl), que faz parte das ferramentas do convidado. Digamos que sua máquina esteja usando 100MB de RAM, então você roda algum programa e ele pula para até 500MB usados. Agora você pára esse programa e espera que a RAM volte para 100MB. No entanto, isso não acontece. Isso porque, para que o ESXi recupere a memória do sistema operacional convidado (o que acontece mesmo quando há uma reserva), ele deve usar o driver de balão. Para fazer com que o sistema operacional "aja" como se tivesse menos memória, o driver de balão "usa" a memória que o ESXi deseja, para que o SO não possa usá-lo.

IOW, mesmo com uma reserva, o convidado está usando apenas a quantidade de RAM do host que está usando. Quando ele usa mais, o ESX aloca mais RAM do host, que o convidado agora acha que sempre tem disponível. Para "convencer" o convidado de que o novo RAM foi removido novamente, o driver de balão o utiliza. A reserva significa simplesmente "Não inicie a VM a menos que a máquina física tenha 1 GB de espaço livre para carregar o convidado" e não "ofereça ao hóspede 1 GB, independentemente de usá-lo ou não".

    
por 29.10.2009 / 16:12
1

Tente:

cat /proc/meminfo

Ele fornece mais detalhes sobre o uso da memória.

    
por 29.10.2009 / 16:43
1

Tente depurar o uso de memória com o script ps_mem.py

    
por 30.10.2009 / 09:08
0

Você pode ter reserva de memória do kernel. Especificamente, verifique os parâmetros da página inicial em / proc / meminfo.

E por favor poste seu /etc/sysctl.conf se esta sugestão não ajudar.

    
por 29.10.2009 / 18:23