Назад | Перейти на главную страницу

Как я могу сказать ядру освободить кешированную память во время запроса на выделение памяти вместо того, чтобы убийца OOM завершал приложение

Я использую 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 вашей программы.