问题描述
在运行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-environment-variables-to-define-arguments