Normalmente, o linux limpará o cache para seu aplicativo. O que você pode fazer é excluir seu aplicativo do killer da OOM. O assassino de OOM não terminará sua aplicação então.
echo -17 > /proc/PID/oom_adj
O PID deve ser o PID do seu programa.
Estou executando o Ubuntu 10.04 com a versão do kernel abaixo
Linux ip-10-0-1-119 2.6.32-343-ec2 #45-Ubuntu SMP Tue Feb 14 18:18:17 UTC 2012 x86_64 GNU/Linux
O status da memória mostra que o cache está usando o compartilhamento máximo da RAM.
ubuntu@ip-10-0-1-12:~$ free -m
total used free shared buffers cached
Mem: 7702 7657 44 0 24 6137
-/+ buffers/cache: 1494 6207
Swap: 0 0 0
Eu entendo que o sistema operacional o gerencia automaticamente e mantém o compartilhamento máximo de RAM no cache para minimizar o custo de E / S.
O problema ocorre durante uma carga pesada quando nosso aplicativo requer memória e, se a mesma quantidade não estiver disponível na RAM física, o killer OOM encerra o aplicativo.
Como eu posso ajustar meu kernel para que, se houver algum pedido de memória do meu aplicativo, o kernel libere um pouco da memória cache para liberar espaço para o meu aplicativo, em vez do killer da OOM que o encerra?
Normalmente, o linux limpará o cache para seu aplicativo. O que você pode fazer é excluir seu aplicativo do killer da OOM. O assassino de OOM não terminará sua aplicação então.
echo -17 > /proc/PID/oom_adj
O PID deve ser o PID do seu programa.
Tags linux-kernel