簡體   English   中英

K8S中的Java OOM自動堆轉儲文件名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM