在 Kubernetes 容器中生成 Java 堆转储

问题描述

我正在 kubernetes 中运行 Jenkins 控制器。我注意到控制器一直在重新启动。

kgp jkmaster-0
NAME                  READY   STATUS    RESTARTS   AGE
jkmaster-0            1/1     Running   8          30m

分配给pod的内存如下

    Limits:
      memory:  2500M
    Requests:
      cpu:      300m
      memory:   1G

只要控制器空闲,我就看不到任何尖峰发生。但是,一旦我开始生成作业,我就会注意到出现了尖峰,每次尖峰都会导致 OOMError 并重新启动

enter image description here

kgp jkmaster-0
NAME                  READY   STATUS      RESTARTS   AGE
jkmaster-0            0/1     OOMKilled   3          3h8m

为了进一步研究这个问题,我想生成一个堆转储。所以我所做的是添加以下内容

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/srv/jenkins/

JAVA_OPTS。我期待下一次当 jenkins 控制器点击 OOM 时,它应该生成一个低于 /srv/jenkins/ 的 Heapdump,但没有。知道我遗漏了什么吗?

重启后 /srv/jenkins/ 下没有 java_pid.hprof 类型的文件

所有JAVA_OPTS

JAVA_OPTS: -Djava.awt.headless=true -XX:InitialRAMPercentage=10.0 -XX:MaxRAMPercentage=60.0 -server -XX:NativeMemoryTracking=summary -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -XX:+UseStringDeduplication \
-XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1 -XX:+PrintFlagsFinal -Djenkins.install.runSetupWizard=false -Dhudson.DNSMultiCast.disabled=true \
-Dhudson.slaves.NodeProvisioner.initialDelay=5000 -Dsecurerandom.source=file:/dev/urandom \
-Xlog:gc:file=/srv/jenkins/gc-%t.log -Xlog:gc*=debug -XX:+AlwaysPretouch -XX:+disableExplicitGC \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/srv/jenkins/ -Dhudson.model.ParametersAction.keepUndefinedParameters=true -Dhudson.model.DownloadService.noSignatureCheck=true

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...