Se / quando a memória heap não desalocada é recuperada?
Eu tenho executado testes de memória durante a noite em um sistema Linux embarcado. Usando o vmstat, observei que a memória livre diminui constantemente com o tempo. De acordo com algunssmaps análise emprocfs, o heap de um processo cresce aproximadamente na mesma taxa. Eu suspeitei de um vazamento de memória e encontrei alguns pontos no código ondenew
edelete
são usados regularmente. No entanto, eu não vi umnew
chamadas sem correspondênciadelete
chamadas.
Eu corri o teste de memória novamente e esta manhã limpou os caches de memória com a seguinte chamada
echo 3 > /proc/sys/vm/drop_caches
A memória livre listada no vmstat desceu para um valor próximo de quando o teste foi iniciado.
O kernel recupera regularmente as páginas de heap não utilizadas? Em caso afirmativo, existem outras vezes além da acima que isso é feito? Provavelmente quando a memória livre fica abaixo de um certo limite?