我知道虚拟内存的概念。通过按需分页(取决于 vm.overcommit_memory),您可以分配比可用 RAM 更多的内存。除非您“触摸”页面,否则什么都不会发生。否则我猜有一个页面错误,然后物理内存被用于页面框架。但这在某种程度上意味着,如果系统内存紧张,它只会调出最近使用的内容并正常工作。
怎么可能需要终止一个进程呢?发生这种情况是因为 mlock() 处理了太多内存吗?垃圾过多后是否会调用 OOM?或者换个角度问:触发 OOM 杀手背后的启发到底是什么?
我读到您可以执行“echo 1 > memory.oom_control”或“echo -17 > /proc/PID/oom_adj”来禁用它。这意味着什么?机器可能会在一段时间内完全没有响应。但是,如果以某种方式,有问题的进程检测到它没有取得进展,它也可能暂时停止消耗内存(那么快),最终一切都应该重新开始工作,还是我错了?
在我的场景中,只有一个进程(具有巨大的内存缓存)。当然,该数据不是持久的,但我仍然不想重新启动该过程(并重新加载该数据)。