【发布时间】:2017-09-25 19:57:46
【问题描述】:
我目前的配置是:
> 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或Xmx之类的选项。
更新 3
My project 应该是一个过度使用的系统。正如a3f 所说的那样,当内存分配失败时,我的应用似乎更喜欢在xmalloc 处崩溃。
> cat /proc/sys/vm/overcommit_memory
2
> ./test/mem.sh
./test/mem.sh: xmalloc: .././subst.c:3542: cannot allocate 1073741825 bytes (4295237632 bytes allocated)
我不想投降,虽然这么多可怕的考验让我筋疲力尽。 所以请告诉我一条通往光明的路; )
【问题讨论】: