Openshift 3.11在多个pod上堆转储OOM



在一个运行OpenShift 3.11的应用程序上,我试图获得HeapDump,因为我怀疑我的pod上有OOM。

我的应用程序在14个副本上运行,我想将以下配置附加到Java选项

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=file:///my/path/jdump/

路径位于外部安装的卷上。

现在我知道默认的文件名将是

java_pid1.hprof 

但来自

ps -ef | grep java

我注意到大多数pod对进程使用相同的pid,我担心如果同时在多个pod上发生OOM,我会遇到当代访问和写入文件的问题。

有没有一种方法可以参数化文件名?我想象类似的东西

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=file:///my/path/jdump/{$podname}_dump.href

谢谢你的回答

您可以将pod名称公开为env变量,然后在命令中使用它,即

command: [ "/bin/java"]
args:
- "-jar"
- "your.jar"
- "-XX:+HeapDumpOnOutOfMemoryError"
- "-XX:HeapDumpPath=file:///my/path/jdump/$(MY_POD_NAME)_dump.href"
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name

注意$(MY_POD_NAME(语法-参考https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#use-定义参数的环境变量

将字段公开为env-var:https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#use-pod字段作为环境变量的值

最新更新