O que pode causar um aumento na memória inativa e como recuperá-la?

6

Eu tenho um aplicativo pesado rodando em um servidor CentOS e estou vendo um comportamento estranho de memória. Aqui está um instantâneo de um gráfico munin:

Comovocêpodever,aquantidadedememóriacomprometidaaumentagradualmente,fazendocomqueoarquivodeswapsejausado.Oquemepareceestranhoéqueaquantidadedememóriainativacontinuacrescendotambém.Entendoqueamemóriainativaé,naverdade,memórialiberada,masaindanãolimpapelosistemaoperacionalecolocadadevoltanopooldememórialivre.Parecequeafaltadememóriaécausadaporessafaltadelimpeza,maspossoestarerrado.

Vocêpodedaralgumasdicasparaencontraracausadoproblemae/oufazercomqueoCentOSrecupereamemóriainativa?

Obrigado.

Algumasinformaçõesadicionais:

1)Eutenhoumtmpfsmontadoem/tmpeonúmerodearquivosarmazenadoslácresce(maséodobrodaquantidadedememóriainativa).

2)cat/proc/meminfo(emumestágioposterioràimagem)fornece:

MemTotal:14371428kBMemFree:1207108kBBuffers:35440kBCached:4276628kBSwapCached:785316kBActive:9038924kBInactive:3902876kBHighTotal:0kBHighFree:0kBLowTotal:14371428kBLowFree:1207108kBSwapTotal:10223608kBSwapFree:6438320kBDirty:627792kBWriteback:0kBAnonPages:7844560kBMapped:49304kBSlab:146676kBPageTables:27480kBNFS_Unstable:0kBBounce:0kBCommitLimit:17409320kBCommitted_AS:16471488kBVmallocTotal:34359738367kBVmallocUsed:275852kBVmallocChunk:34359462007kBHugePages_Total:0HugePages_Free:0HugePages_Rsvd:0Hugepagesize:2048kB

3)OaplicativoéumacombinaçãodeMySQL,Heritrix( link ) e um servlet Java baseado em Tomcat para gerenciar coisas.

    
por Boaz 13.04.2010 / 21:43

2 respostas

5

It is my understanding that the inactive memory is actually memory freed up but not yet clean by the OS and put back in the free memory pool.

Isso é falso. A memória "inativa" é uma memória ativamente mapeada que não é utilizada por nenhum aplicativo há algum tempo. Quando é hora de trocar, a memória é retirada de páginas marcadas como esta e trocadas. Também pode ser usado para trocar a favor do cache de páginas.

As you can see the amount of committed memory increases gradually causing the swap file to be use. What strikes me odd is that the amount of inactive memory keeps growing as well.

Os dois não se correlacionam necessariamente, mas para mim isso parece strongmente que algo está vazando memória. O fato de você ter páginas que não estão sendo acessadas por qualquer aplicativo em crescimento, e o crescimento de troca também sugere que algo está alocando memória, esquecendo-a e depois não a liberando depois.

A memória pode estar 'inativa', por exemplo, se malloc () for chamado. Essa é uma chamada libc que pode alocar um pedaço de memória, mas apenas uma parte dela é utilizada para realizar qualquer trabalho (menos que o número de páginas alocadas). Mesmo se você liberar no malloc, na verdade não significa que você liberte a memória pedindo que o sistema operacional faça isso, suas tabelas apenas mallocs podem marcar como 'reutilizáveis', pode liberá-las depois.

    
por 13.11.2011 / 18:54
0

qual é esse aplicativo e ele tem vazamento de memória? ou seja, se seu aplicativo for encerrado, a memória será retornada ao sistema operacional?

Se a sua aplicação está vazando memória, você precisa usar algo como uma cerca elétrica para encontrar esses problemas e corrigi-los.

Qual é o seu aplicativo escrito? você precisa usar o depurador correto para o idioma em que está escrito.

Eu duvido muito que o sistema operacional esteja vazando memória, a menos que você esteja usando muitos recursos e não os liberando corretamente.

Além disso, o seu gráfico de memória está muito ocupado e muito difícil de compreender, há cerca de 20 cores acontecendo lá, é tão claro quanto a lama.

Você acha que é um problema com seu disco RAM? provavelmente está se expandindo para atender a demanda, no entanto, não está sendo redimensionado quando necessário.

    
por 13.04.2010 / 22:02