Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Docker:在启用内存限制和禁用内存过度限制的情况下运行容器有什么负面影响?_Java_Linux_Memory_Docker - Fatal编程技术网

Java Docker:在启用内存限制和禁用内存过度限制的情况下运行容器有什么负面影响?

Java Docker:在启用内存限制和禁用内存过度限制的情况下运行容器有什么负面影响?,java,linux,memory,docker,Java,Linux,Memory,Docker,在我的环境中,我将禁用内存overmit vm.overmit=2。这也会禁用Linux OOMKiller 原因是,我在docker容器中运行Java应用程序时,有适当的内存大小限制,我希望看到它们在OOMError和编写堆转储时失败,而不是被linux OOMKiller默默地杀死 我不确定这可能带来的负面影响。我不是Linux内核、docker内存管理或Java VM专家,所以决定在这里提问 如果有人有这样的经验,你能告诉我吗?如果禁用内存过度分配,那么如果JVM从操作系统请求内存,并且所

在我的环境中,我将禁用内存overmit vm.overmit=2。这也会禁用Linux OOMKiller

原因是,我在docker容器中运行Java应用程序时,有适当的内存大小限制,我希望看到它们在OOMError和编写堆转储时失败,而不是被linux OOMKiller默默地杀死

我不确定这可能带来的负面影响。我不是Linux内核、docker内存管理或Java VM专家,所以决定在这里提问


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

如果禁用内存过度分配,那么如果JVM从操作系统请求内存,并且所有内存都已提交,那么系统调用将失败。当这种情况发生时,JVM可能会失败,出现OOME和包含交换空间不足?的消息

我的理解是,这将导致写入致命错误日志文件。不清楚是否可以创建堆转储


如果您试图追踪可疑的内存泄漏,我建议将初始堆大小和最大堆大小设置为相同的值,并使它们足够小,以避免交换空间不足?噢。如果你得到一个正常的OOME,你应该能够得到一个堆转储。

谢谢,Stephen。我计划将-Xmx设置为-Xmx,并使用-XX:+HeapDumpOnOutOfMemoryError JVM选项使Java应用程序自动生成堆转储。但我不确定当内存过度使用被禁用时,Java应用程序是否会因OOM而失败。如果它以不同的错误类型失败,它将不会自动生成堆转储,这对我来说是不希望的行为。我建议您尝试一些简单的实验。