低内存应用优先级

Ryt*_*tis 5 linux memory debian

我在内存有限且无法选择添加交换空间的机器上运行 Debian。该机器用作 Web 和数据库服务器。我看到的问题是,当多个 Web 请求进来时,我的数据库停止接受连接,有时甚至崩溃,因为系统没有更多可用的 RAM。

是否可以告诉 Linux 杀死特定进程(在我的情况下是 Apache),以防另一个进程(在我的情况下是 Firebird)请求内存并且没有足够的内存?如果本地无法做到,也许有一些工具可以帮助我实现这一目标?

Luc*_*nti 11

您可以调整 OOM 杀手,以偏爱某些进程。每个进程都有一个分数,表示在系统在 OOM 情况下运行时该进程被杀死的可能性。您可以在 中查看进程的分数/proc/${PID}/oom_score。您可以使用/proc/${PID}/oom_adj以下方法来偏向 OOM 杀手的决定:高值会增加 OOM 杀手杀死 ${PID} 的可能性。的值oom_adj由子进程继承,因此您只需在启动时在主 apache 进程中设置它(在这种情况下,您应该拥有一个重新启动 apache 的看门狗);另一种方法是将主进程保留在其默认级别并调整每个子进程,以便主进程保持活动状态并根据需要重新生成子进程(在这种情况下,您需要一个外部守护进程来检查新的子进程和曲调oom_adj)。当然,这假设您正在使用多进程工作者 ;-)

请注意,正常范围的oom_adj值(-16,15)只是一个偏差,OOM 杀手的启发式如果其分数足够高,仍然可能会选择另一个过程。特殊值 -17 使进程无法被 OOM 杀手杀死,但它是危险的,因为如果不可杀死的进程(例如你的 DB)变得狂暴,内核可能无法从内存短缺中恢复过来。