我的当前配置如下:
> 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
我的项目应该是一个过度分配内存的系统。正如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)
虽然经历了许多可怕的考验使我感到筋疲力尽,但我不想放弃。请向我展示通往光明的道路;)
mem_limit
。 - RodolfoAP