No intervalo de alguns dias, a memória sobe para 90% e depois permanece lá. Isso é um vazamento de memória? Como detectar quais processos usam memória cache?

3

Eu tenho um NAS com um sistema operacional da web e vários daemons rodando juntos que formam um sistema para complementar câmeras IP Mobotix.

Nas últimas semanas, estou tendo um pequeno problema - o monitor de recursos interno mostra o aumento do uso de memória em aproximadamente 10% por dia. Quando atinge 90%, ele fica dentro de um intervalo de +/- 1%.

Eu também estou calculando, o que eu chamo, a memória otimizada. Ou seja, os buffers removidos e o cache adicionado ficam em ~ 20% todos os dias.

Saída de free a partir de agora:

             total       used       free     shared    buffers     cached  
Mem:       1901072    1731036     170036          0     146228    1207360  
-/+ buffers/cache:     377448    1523624  
Swap:      1048572       1648    1046924  

Como você pode ver, a memória está quase cheia, mas o cache / buffer parece estar ocupando a maior parte da memória.

Tenho a sensação de que isso é causado devido a um vazamento de memória em algum lugar, mas não tenho certeza.

Como faço para detectar quais processos estão preenchendo a memória em buffer / cache?

    
por joltmode 23.09.2013 / 10:55

1 resposta

5

Isso não é um problema, Linux deveria fazer isso. Se você estava realmente tendo problemas de memória, você notaria que tudo estava correndo devagar e os processos seriam mortos pelo assassino da OOM .

O kernel do Linux aproveita a RAM não utilizada para o armazenamento em cache de disco. Isso é uma coisa boa, faz tudo correr mais rápido. Essa memória ainda está disponível para qualquer programa que precise dela, ela será usada apenas para armazenamento em cache se não for necessária em outro lugar. É por isso que free mostra buffers/cache separadamente, você deve considerá-los como memória livre.

A quantidade real de memória disponível para o seu sistema é free + buffers + cache , no exemplo em que você postou que é 170036 + 146228 + 1207360 = 1523624 , isso é ~ 1.5G de memória livre.

Isso é explicado muito bem na Documentação RedHat :

In this example the total amount of available memory is 4040360 KB. 264224 KB are used by processes and 3776136 KB are free for other applications. Do not get confused by the first line which shows that 28160KB are free! If you look at the usage figures you can see that most of the memory use is for buffers and cache. Linux always tries to use RAM to speed up disk operations by using available memory for buffers (file system metadata) and cache (pages with actual contents of files or block devices). This helps the system to run faster because disk information is already in memory which saves I/O operations. If space is needed by programs or applications like Oracle, then Linux will free up the buffers and cache to yield memory for the applications. If your system runs for a while you will usually see a small number under the field "free" on the first line.

Para mais informações, consulte aqui:

por 23.09.2013 / 11:06