Я использую Ubuntu 10.04 с указанной ниже версией ядра
Linux ip-10-0-1-119 2.6.32-343-ec2 # 45-Ubuntu SMP Вт, 14 февраля 18:18:17 UTC 2012 x86_64 GNU / Linux
Состояние памяти показывает, что кэш использует максимальную долю ОЗУ.
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
Я понимаю, что ОС управляет этим автоматически и сохраняет максимальную долю ОЗУ в кеше, чтобы минимизировать затраты на ввод-вывод.
Проблема возникает во время большой нагрузки, когда нашему приложению требуется память, и если такой же объем недоступен в физической ОЗУ, убийца OOM завершает работу приложения.
Как я могу настроить свое ядро так, чтобы, если есть какой-либо запрос памяти от моего приложения, ядро должно освободить часть кеш-памяти, чтобы освободить место для моего приложения, вместо того, чтобы убийца OOM завершил его?
Обычно Linux очищает кеш для вашего приложения. Что вы можете сделать, так это исключить свое приложение из OOM killer. Тогда OOM killer не завершит работу вашего приложения.
echo -17 > /proc/PID/oom_adj
PID должен быть PID вашей программы.