我可以在使用旧版 2.6.x 内核的 VPS 上编译具有 1 GiB RAM 的程序。但是当我尝试在具有 1.1 GiB RAM 和 3.9.x 内核的 VPS 上编译该程序时,编译器总是被 OOM Killer 杀死。
如何让 OOM 更加被动?
答案1
您不会更改 OOM 杀手 - 这是有原因的。但您应该做的是减少内存过量使用。默认情况下,这是 50%(请参阅 /proc/sys/vm/过量承诺比率) 来处理程序试图索取比其实际需要更多的内存的情况。但是,如果您编写的程序只索取其所需的内存量(或者您正在运行从不执行 gc 的 JVM,因为它们不知道系统内存紧张),那么 OOM Killer 就会开始收割东西。
答案2
如果您的 FS 上有足够的空间,您可以通过以下方式向您的 VM 添加临时交换空间:
# fallocate -l 4g /SWAP
# mkswap /SWAP
# swapon /SWAP
但请记住,如果您的系统正在积极交换,编译将不会是一个快速的过程。