在一个运行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字段作为环境变量的值