【发布时间】:2020-03-23 14:51:51
【问题描述】:
比方说,一个 docker 容器在一个 16G RAM、2 核 CPU 的服务器中运行 JVM,以下是容器的内存限制:
mem_limit: 14G
max_mem: 13G
threads: 1
max_pool_size: 20
max_mem 是 JVM 使用的最大堆大小,mem_limit 是容器使用的最大内存。我正在尝试了解以下内容:
- 当 JVM 达到
max_mem限制时会发生什么? - 当容器到达
mem_limit时会发生什么? - 是否会在有或没有 OOM 错误日志消息的情况下重新启动?我们在哪里可以看到这些日志?
-
max_mem之后我们应该为容器留多少内存? - 线程如何影响内存限制?
【问题讨论】:
-
它应该在很大程度上与非 Docker JVM 进程的行为方式相同,以
-Xmx13G开头,在具有 14 GB 内存的系统上;根据 JVM 内部发生的其他情况,您将获得内核 OOM-killed 或获得 Java 级别的 OutOfMemoryError。