尽管页面缓存从未被逐出,但 OOM 杀手仍会终止进程

尽管页面缓存从未被逐出,但 OOM 杀手仍会终止进程

我们的生产服务器在负载下有时会遇到以下问题(Linux 4.10):

  1. 处理负载的应用程序(网络服务器)正在高负载运行。
  2. 启动了一项新任务(例如 cron)。这需要 clone() 系统调用,但无法分配内存。
  3. 内核 OOM 终止程序启动,并终止其中一个 Web 服务器应用程序进程,以便新的任务可以启动。
  4. “free -m”显示可用内存极低,服务器 64GB 内存中大约只有 1-3GB。但是,大部分内存都在页面缓存中。
  5. 系统没有任何交换分区/文件设置,并且 vm.swappiness 设置为其默认值 60。

相反,如果我们在加载开始之前运行“echo 3 > /proc/sys/vm/drop_caches”,OOM 就不会终止我们的网络服务器应用程序,一切都会正常运行。

在上述情况下,内核在尝试终止进程以释放一些内存之前是否不释放页面缓存?

相关内容