如何告诉内核在内存分配请求期间释放缓存内存而不是 OOM 终止程序终止应用程序

Sup*_*tik 3 linux-kernel

我正在使用以下内核版本运行 Ubuntu 10.04

Linux ip-10-0-1-119 2.6.32-343-ec2 #45-Ubuntu SMP 周二 2 月 14 日 18:18:17 UTC 2012 x86_64 GNU/Linux

内存状态显示缓存正在使用 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
Run Code Online (Sandbox Code Playgroud)

我知道操作系统会自动管理它并在缓存中保留最大的 RAM 份额以最小化 I/O 的成本。

问题是在重负载期间,当我们的应用程序需要内存时,如果物理 RAM 中没有相同数量的可用内存,OOM 杀手会终止应用程序。

我如何调整我的内核,以便如果我的应用程序有任何内存请求,内核应该释放一些缓存内存以为我的应用程序腾出空间,而不是 OOM 杀手终止它?

Luc*_*man 8

通常,Linux 会为您的应用程序清除缓存。您可以做的是从 OOM 杀手中排除您的应用程序。OOM 杀手不会终止您的应用程序。

echo -17 > /proc/PID/oom_adj
Run Code Online (Sandbox Code Playgroud)

PID 应该是您程序的 PID。