我们有一个Debian Linuxnetworking服务器。 它只是运行Apache2。 我们的mysql服务器在另一台主机上。 然而,我们有时在Web服务器上运行cron任务来执行常规任务。
不过最近有一个cron任务有一个bug,开始吞噬内存。 Linux OOM杀手杀死了Apache。 当然,这导致我们的网站。 内存饥饿的克朗继续运行。 然而在这种情况下,我希望OOM杀手杀死那个脚本,而不是 apache。
有没有一些方法来configuration内核,所以我可以说不要杀死叫做“apache2”的进程(或者至less让apache2成为最后的杀手)? apache和普通cron都是以同一个用户(www-user)运行的。
这听起来不像你正在解决问题的根本原因,实际上debugging为什么这个cron工作正在使用这么多的内存。
你可以尝试设置这个选项
echo 1> / proc / sys / vm / oom_kill_allocating_task
这将告诉OOM杀手杀死触发OOM条件的过程,但这并不保证是你的cron工作。 您还可以在脚本中使用“ulimit -m”来设置要使用的最大驻留内存量。 我认为你最好的select是评估为什么cronjob使用了太多的内存,如果它最适合另一个主机,或者被重写消耗更less的内存。
OOMKiller可以在一定程度上进行configuration。 启动进程后,可以将/proc/<pid>/oom_adj的值设置为负整数。 这将影响OOMKiller对stream程及其子女的亲和力。 当系统遇到内存不足的情况时,其他进程将被终止。
您也可以更改虚拟内存超出提交行为。 例如,您可以将/ proc / sys / vm / overcommit_memory的值更改为“2”,即不要过量提供内存。 (不要只是改变这个值而不理解它的作用。)
在“没有过度使用”模式下,无论新进程要求更多内存,在尝试分配时都会收到错误。 所以不要让这个OOM杀手去干扰你的旧的,长时间运行的程序,要求RAM的新人被告知“不”。
…然后你需要解决你的记忆问题。 find泄漏点,重新devise耗费内存的过程,为箱子增加更多内存等。
简短的回答:不,OOM杀手是不可configuration的,并且一直有阻止改变这一点。
只是我的头顶上的一些想法:
增加交换空间 – 如果脚本是32位,那么应该很容易给它们太多的空间用尽。
增加物理内存。 在1很多。
使用ulimit来限制脚本可以使用的内存量。
它在这里说,你可以在一个进程上设置一个OOM_DISABLE“标志”: http ://linux-mm.org/OOM_Killer