Java 容器在 kubernetes 中因内存不足而崩溃

Nei*_*son 0 kubernetes

这个容器在我的笔记本电脑上的 Docker 上运行良好,但在 Kubernetes 中运行时因 java.lang.OutOfMemoryError: Java heap space 崩溃。为什么?

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mem-eater
spec:
  template:
    metadata:
      labels:
        # Refer to this name when defining a service.
        app: mem-eater
    spec:
      containers:
        # This is the docker image on your docker registry. This one is on
        # the official Docker registry.
      - image: neilhwatson/memory-eater:prod
        name: mem-eater
Run Code Online (Sandbox Code Playgroud)

它尝试设置资源限制和请求,以及 JVM Xmx 限制,但在所有情况下,崩溃都是完全相同的。

其他信息:

  • 使用 Java 9 64 位
  • 使用 kops 在 AWS 上安装 k8s 1.8.8。
  • Docker CE 17.12

Oma*_*jid 5

您是否尝试过该-XX:+UseCGroupMemoryLimitForHeap选项?它告诉 JVM 使用 cgroup 提供的限制来确定堆大小(和其他资源限制)而不是系统范围的限制。

Christine Flood 写了一篇很棒的文章,介绍了在容器上使用 Java 时非常有用的一些标志:https : //developers.redhat.com/blog/2017/04/04/openjdk-and-containers/