当前位置: 首页 > 面试题库 >

如何在Linux中禁用oom Killer?[关闭]

石喜
2023-03-14
问题内容

关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。

想改善这个问题吗? 更新问题,使其成为Stack Overflow
的主题。

9个月前关闭。

我当前的配置是:

> cat /proc/sys/vm/panic_on_oom
0
> cat /proc/sys/vm/oom_kill_allocating_task
0
> cat /proc/sys/vm/overcommit_memory
1

但是当我执行任务时,它还是被杀死了。

> ./test/mem.sh
Killed
> dmesg | tail -2
[24281.788131] Memory cgroup out of memory: Kill process 10565 (bash) score 1001 or sacrifice child
[24281.788133] Killed process 10565 (bash) total-vm:12601088kB, anon-rss:5242544kB, file-rss:64kB

更新资料

我的任务习惯于科学计算,这会花费很多记忆,看来这overcommit_memory=1可能是最佳选择。

更新2

实际上,我正在从事一个数据分析项目,该项目花费的内存多于16G,但是我被要求将其限制在左右5G。通过优化程序本身来实现此要求可能是不可能的,因为该项目使用许多子命令,并且其中大多数不包含Java
XmsXmxJava 中的选项。

更新3

我的项目应该是一个过度使用的系统。就像a3f所说的那样,似乎我的应用程序更喜欢xmalloc在mem分配失败时崩溃。

> cat /proc/sys/vm/overcommit_memory
2
> ./test/mem.sh
./test/mem.sh: xmalloc: .././subst.c:3542: cannot allocate 1073741825 bytes (4295237632 bytes allocated)

我不想投降,尽管如此多的考验使我筋疲力尽。所以,请给我看看通往光明之路; )


问题答案:

OOM杀手不会消失。如果没有记忆,则必须付费。您可以做的是设置一个限制,在此限制之后内存分配将失败。这正是vm.overcommit_memory2实现的设置。

从文档:

Linux内核支持以下过量使用处理模式

2-不要过度使用。不允许为系统分配的总地址空间超过swap
+物理RAM的可配置量(默认为50%)。在大多数情况下,这取决于您使用的数量,这意味着进程在访问页面时不会被杀死,但是会在适当的分配内存时收到错误。

通常,内核会很乐意分发虚拟内存(过量使用)。仅当您引用页面时,内核才必须将页面映射到真实的物理框架。如果无法满足该请求,则需要由OOM杀手杀死一个进程以腾出空间。

禁用过量使用意味着如果内核无法提交所请求的内存量,eg
malloc(3)将返回NULL。这使事情更具可预测性,尽管有局限性(许多应用程序分配的资源超出了他们的需要)。



 类似资料:
  • 想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 很抱歉为这些愚蠢的问题烦恼,但我如何才能禁用目录子文件夹分组?每次我用子文件夹创建目录时,它们都被分组在一行中(参见屏幕)。目录屏幕感谢您的回答。

  • 问题内容: 在一个课堂项目中,我的老师告诉我们进行一些代码评估(C语言),并且这样做,我们需要在测试期间禁用磁盘缓存。 当前我正在使用Ubuntu 12.04,该怎么做? 谢谢。 问题答案: 您需要root用户权限才能执行此操作。您可以运行命令以禁用写缓存,在该驱动器中必须将驱动器替换为设备: 您还可以像这样选择性地禁用对单个分区的写缓存:。 要重新启用缓存,只需使用参数。 男子hdparm的,人

  • 问题内容: 使用杰克逊2.1,如何禁用错误消息似乎要禁用的消息? 我以为这只是世界上最简单的事情,但是该死了,它太迟了,我还没有找到一个简单的教程或任何特别明显的东西。?他们为什么要使它如此直观,然后使错误消息看起来如此简单? 尽管我 确实 喜欢该错误消息,但我的意思是,它比NPE更好。 我假设有一种使用注释的方法-但是我根本不希望将它们用于我正在做的简单工作! 问题答案: 我相信,您可以按班级或

  • 问题内容: 我创建了一个swings应用程序,并且GUI上有一个“开始”按钮。我希望每当我单击该“开始”按钮时,都应禁用开始按钮,并启用“停止”按钮。 为此,我在“开始”按钮的“ ActionPeformed(…)”方法中编写了以下代码 但是以上代码并未在GUI上产生所需的影响。 上面的代码对我想要做的正确吗? 它也不能与“ repaint()”一起使用。 编辑: 代码很长,所以我不能粘贴所有代码

  • linux中如何关闭nf_conntrack,并且不会被iptables自动拉起。之前试过网上的帖子,关闭后启动iptables,nf_conntrack又被自动拉起 能帮忙看看以下处理步骤的命令正确吗? 关闭内核中的nf_conntrace操作 关闭所有防火墙策略 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/seli

  • 我想从前端应用程序调用POST请求,但是在控制台中我看到: CORS策略阻止从来源“http://localhost:9090/authenticate”访问位于“http://localhost:3000”的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“access-control-allog-origin”标头。