关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。
想改善这个问题吗? 更新问题,使其成为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
Xms或XmxJava 中的选项。
更新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)
我不想投降,尽管如此多的考验使我筋疲力尽。所以,请给我看看通往光明之路; )