Como posso dizer ao kernel para liberar memória em cache durante a solicitação de alocação de memória em vez do killer da OOM finalizar o aplicativo?

3

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?

    
por Supratik 15.03.2012 / 14:21

1 resposta

8

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.

    
por 15.03.2012 / 14:31