Docker:启用内存限制和内存过载禁用的运行容器的负面影响是什么?

在我的环境中,我将禁用内存过量使用(vm.overcommit = 2)。 这也禁用了Linux OOMKiller。

原因是我在Docker容器中运行Java应用程序时,内存大小受到了限制,我希望看到它们与OOMError(和写入堆转储)失败,而不是由Linux OOMKiller静静地杀死。

Iam不确定可能的负面影响。 我不是Linux内核,docker内存pipe理或Java VM专家,所以决定在这里问一下。

如果有人有这样的经验,你能告诉我吗?

如果禁用了内存过量使用,那么如果JVM向操作系统请求内存并且所有内存都已提交,则系统调用将失败。 发生这种情况时,JVM将失败,并显示包含“Out of swap space?”的消息。

我对Oracle OOME故障诊断文档的阅读是,这会导致写入致命错误日志文件。 目前还不清楚是否可以创build堆转储。


如果你试图追查一个可疑的内存泄漏,我会build议设置初始堆和最大堆大小是相同的值,并使其足够小,你不会得到一个“超出交换空间? OOME。 如果你得到一个“正常”的OOME,你应该可以得到一个堆转储。