openshift - 多个 pod 上的 Openshift 3.11 堆转储 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-environment-variables-to-define-arguments
推荐阅读
- android - 如何动态包含合并布局?
- amazon-web-services - 使用 Packer 构建时的身份验证错误
- r - 从雅虎财经中提取数据
- powershell - 仅在脚本第一次运行时发生异常
- gtk - 是否可以在不使用 GObject 样式构造的情况下扩展基本 Gtk 小部件?
- ios - UITabBar 奇怪的行为首先在模拟器中初始化
- python - 纸浆能否以最低限度管理约束?
- vue.js - vue js中项目构建的模式
- javascript - 谷歌浏览器显示基本过时的颜色选择器
- google-analytics - 在 Google Analytics 中跟踪 Google Ads 和 Facebook Ads