Java容器在kubernetes中崩溃了内存

时间:2018-02-20 20:06:19

标签: kubernetes

这个容器在我的笔记本电脑上的Docker上正常运行,但在java.lang.OutOfMemoryError崩溃时:在Kubernetes中运行时的Java堆空间。为什么呢?

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

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

其他信息:

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

2 个答案:

答案 0 :(得分:2)

我有完全相反的情况,与

崩溃
docker run -it neilhwatson/memory-eater:prod

在Kubernetes中运行正常,没有重启(但是在511次迭代后停止记录)。

(抱歉没有评论,我没有足够的代表)。

答案 1 :(得分:2)

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

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