free mostra mais memória usada do que o total do processo principal

3

ATUALIZAÇÃO:

Isso estava sendo causado devido a um problema conhecido com o nss-softkn. Veja este artigo: link

Quando eu corro free -m da minha caixa centos 6.5 eu estou vendo que eu tenho apenas cerca de 1400 mb de memória RAM disponível, incluindo o cache. Quando eu faço top, classifico por memória e somam os processos que estou vendo apenas por volta de 1600 sendo usados. Eu deveria ter muito mais memória livre. Isso está acontecendo em algumas de nossas caixas.

[root@db1 ~]# free -m
              total      used       free     shared    buffers     cached
Mem:          7840       7793         47          0        287       1357
-/+ buffers/cache:       6148       1692
Swap:         7983          7       7976

saída principal

Aquiestáumamaneiramelhordevisualizaramemóriaconsumidapelosprocessos:

    
por ipengineer 15.12.2014 / 23:54

4 respostas

7

Você tem cerca de 1692m na memória livre de acordo com o Linux.

Na linha superior "Mem", parece que sua memória é quase 99% (7793m / 7840m), mas na realidade você está usando apenas 78% da memória disponível. Veja também link para uma explicação mais detalhada.

Contra o topo vs vs / proc / meminfo

Memória do processo .
Adicionar a memória usada pelos processos em top e tentar combinar isso com a memória usada de free vai lhe dar um tempo ruim. Devido à paginação de top , você pode nem mesmo obter todos os processos nesta lista uma maneira melhor de ir é usar ps aux --sort -rss para ordenar os processos pelo uso da memória.

Disk caching .
O Linux vai usar a memória que você não está usando para fazer as coisas rodarem muito mais rápido por trás dos bastidores. Isso é observado na coluna "em cache" de free e é por isso que você deve examinar os valores ao lado de "- / + buffers / cache" para memória real usada e livre.

Cache do Slab do Kernel .
Os módulos e drivers do kernel têm uma maneira de usar sua memória não utilizada também . O "SReclaimable" é a memória que você poderia usar sob pressão de memória. Há uma ferramenta legal chamada slabtop que pode identificar como o kernel é esse cache.

Limpar caches .

echo 1 > /proc/sys/vm/drop_caches Para liberar pagecache

echo 2 > /proc/sys/vm/drop_caches para livrar dentárias e inodes

echo 3 > /proc/sys/vm/drop_caches Para liberar pagecache, dentries e inodes

Veja também

por 16.12.2014 / 00:29
1

Eu encontrei o problema aqui. Eu precisava olhar para / proc / meminfo e ver o que o kernel estava armazenando em cache como espaço de slab. Meu problema não era entender o quanto "free" de memória top / ps / free disse que eu tinha. Era o fato de que esses números não estavam somando. O comando "free" me dizia que eu tinha aproximadamente 1692mb livres, mas meus processos totalizavam apenas cerca de 20% da minha memória total.

Este artigo descreve meus problemas exatos:

link

    
por 16.12.2014 / 04:48
0

Acredito que você esteja interpretando mal o Buffers / Cache - existe > 6 GB sendo usados como cache de memória de acordo com a linha Buffers / Cache +/-. Se isso for necessário, ele pode ser ingerido - como não é, o sistema operacional o está usando para armazenar em cache as leituras de disco e similares.

    
por 16.12.2014 / 00:03
0

Com base no link , criei um script que chamei de free (que coloquei em um caminho à frente de / usr / bin no meu .bash_profile) que produz resultados úteis:

#!/usr/bin/perl

$result = '/usr/bin/free';
print "$result";

if ($result =~ /cache:\s+(\d+)/)
{
 $mem = $1;
 $slab = 'cat /proc/meminfo|grep SReclaimable'; $slab =~ s/[^\d]//g;
 print "Slab                  $slab\n";
 print "Actual Used        ** ",$mem-$slab," **\n";
}
    
por 05.07.2016 / 13:44