[英]Java OOM Automatic Heap Dump File Name in K8S
這個問題的答案可以在https://stackoverflow.com/a/34077693/1525813找到,但不是從 Kubernetes 的角度來看。
對於我的 k8s 應用程序,我在 k8s YAML(如下)中將 JVM 選項指定為環境變量。 由於命令替換未按預期工作,這導致容器啟動(運行 Linux)時 pod 崩潰的問題。
環境變量
spec:
template:
spec:
containers:
- name: myapp
command: [ '/bin/sh', '-c' ]
args:
- exec java $JVM_OPTS -jar myapp.jar
# - exec startup.sh # For few other apps
env:
- name: JVM_OPTS
value: >-
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/logs/heapdump/hd_$(date +%F_%H-%M-%S)_pid$$.hprof
-XX:+CrashOnOutOfMemoryError
-XX:OnError=/scripts/threaddump.sh
-XX:ErrorFile=/logs/error/hs_err_$(date +%F_%H-%M-%S)_pid$$.log
-Xlog:gc*=debug:file=/logs/gc/gc_%t_pid%p.log:time,uptimemillis,pid,tid,level,tags
容器啟動時的錯誤日志
Error: Could not find or load main class +%F_%H-%M-%S)_pid$.hprof"
Caused by: java.lang.ClassNotFoundException: +%F_%H-%M-%S)_pid$.hprof"
我在這里錯過了什么?
較早的配置是-XX:HeapDumpPath=/logs/heapdump/hd_%t_pid%p.hprof
,它不會中斷容器啟動,但會創建名為hd_%t_pid%p.hprof
的堆轉儲文件,即%t
和%p
沒有被替換為-XX:HeapDumpPath
但被替換為-Xlog:gc*
。
此處差異的原因可能是什么?
謝謝
詳情見https://github.com/kubernetes/kubernetes/issues/112645
我在 shell 腳本中為 JVM_OPTS 添加了這些值,並使用它來調用 JAR。 然后從 k8s YAML args 調用腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.