Apenas init, telnet e sh estão em execução, ainda vazamento de memória. Como encontrar razão?

0

Temos problemas com caixas de linux embutidas. Algumas caixas têm um vazamento de memória.

Nenhum dos processos não contém a memória perdida.

Após matar todos os processos possíveis, o vazamento ainda existe. Ao olhar de / proc / meminfo, parece que a memória vazada está sob memória inativa:

~ # echo 1 > /proc/sys/vm/drop_caches ; cat /proc/meminfo
MemTotal:       126744 kB
MemFree:        107684 kB
Buffers:             0 kB
Cached:           1160 kB
SwapCached:          0 kB
Active:           1204 kB
Inactive:        12532 kB
SwapTotal:           0 kB
SwapFree:            0 kB
...


~ # ps        
  PID USER       VSZ STAT COMMAND
    1 root      2748 S    init       
    2 root         0 SW<  [kthreadd]
    3 root         0 SW<  [ksoftirqd/0]
    4 root         0 SW<  [events/0]
    5 root         0 SW<  [khelper]
   31 root         0 SW<  [kblockd/0]
   42 root         0 SW<  [khubd]
   48 root         0 SW<  [kmmcd]
   82 root         0 SW   [pdflush]
   83 root         0 SW   [pdflush]
   84 root         0 SW<  [kswapd0]
   85 root         0 SW<  [aio/0]
  170 root         0 SW<  [rpciod/0]
  176 root         0 SW<  [mmcqd]
 1346 root      2756 S    telnetd -l /bin/login 
 1347 root      2856 S    -sh 
 3737 root      2856 R    ps 
~ #

Ram discos não estão em uso. A versão do Linux é 2.6.25.9.

Existe alguma maneira de encontrar o motivo pelo qual a memória inativa aumenta o tempo todo? É possível liberar ou soltar a memória inativa?

    
por SKi 24.04.2012 / 10:54

2 respostas

3

Memória inativa não é um problema, certamente não é um "vazamento"; são páginas de memória que normalmente são usadas para armazenar em buffer arquivos ou executáveis que não estão em execução no momento e estão sendo mantidos para possível reutilização. Se algo precisar dos dados neles (lendo o mesmo arquivo ou executando o mesmo programa), eles serão reutilizados sem bater no disco novamente; se alguma outra coisa precisar das páginas, no entanto, seu estado inativo significa que elas serão usadas quando necessário.

Coloque um pouco diferente, pense em memória livre como memória que nunca foi alocada; memória inativa é a memória que foi alocada e liberada .

    
por 24.04.2012 / 11:06
2

Não há evidência de vazamento de qualquer tipo nos dados que você postou. A memória é adequadamente rastreada como inativa. Se você fizer um sync antes do drop_caches , provavelmente não verá muita memória inativa, mas estará criando isso forçando as páginas para fora do cache. Se eles não podem ser libertados (digam que estão sujos) eles ficam inativos.

Você pode forçar a memória inativa suja a ser sincronizada mais rapidamente executando sync , mas não consigo imaginar nenhum motivo possível para isso. Você não pode forçar a memória limpa e inativa a ser liberada, nem posso imaginar qualquer motivo que você queira. O sistema já pode descartá-lo e já é o primeiro na fila para uso quando o pool de memória livre está esgotado. Por que você quer que seja mais livre?

Se você não quiser que o sistema use a memória, retire-a da máquina e coloque-a em sua mesa. Porque agora, você está apenas reduzindo o sistema, forçando o sistema a reduzir os caches e liberar páginas sujas mais rapidamente do que gostaria, causando toneladas de E / S desnecessárias. Apenas deixe-o em paz e deixe-o fazer o seu trabalho.

    
por 24.04.2012 / 11:05

Tags