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