簡體   English   中英

將時間戳添加到從 kubernetes pod 中運行的 java 應用程序生成的堆轉儲文件名中

[英]Adding the timestamp to heap dump filename generated from java application running in kubernetes pod

我想在堆轉儲文件名之后添加一個時間戳。 當我在運行以下命令時指定-XX:HeapDumpPath選項時,它可以工作:

java -Xmx64m  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=outputFilename.$(date +_%m%d%Y.%H:%M:%S).bin -jar app.jar

但是,當在 Kubernetes 服務 yml 文件上設置此選項時,它不起作用。 以下是 yml 文件中定義的選項:

    env:
        - name: JAVA_TOOL_OPTIONS
          value: " -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\"/dumps/heap-dump/demo-heap-dump$(date +_%m%d%Y.%H:%M:%S).bin\""

嘗試創建堆轉儲時會引發以下錯誤

2022-08-09 13:02:15.901 CESTPicked up JAVA_TOOL_OPTIONS: -Xmx1m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="/dumps/heap-dump/"demo-heap-dump$(date +_%m%d%Y.%H:%M:%S).bin
2022-08-09 13:00:56.853 CESTUnrecognized option: +_%m%d%Y.%H:%M:%S).bin

謝謝您的幫助。

最好的問候,蘭多。

我找到了解決此問題的解決方法。 無法通過添加XX:HeapDumpPath=\"/dumps/heap-dump/demo-heap-dump$(date +_%m%d%Y.%H:%M:%S).bin\""來解決XX:HeapDumpPath=\"/dumps/heap-dump/demo-heap-dump$(date +_%m%d%Y.%H:%M:%S).bin\""在 yml 中,因為它不會被執行。要執行此行$(date +_%m%d%Y.%H:%M:%S)需要在 bash 終端上運行。

我從 yml 文件中刪除了以下行:

 - name: JAVA_TOOL_OPTIONS
          value: " -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\"/dumps/heap-dump/demo-heap-dump$(date +_%m%d%Y.%H:%M:%S).bin\""

修改了 docker 文件以使用 bash 執行 jar 而不是下面的 Z93F725A07433FE1C846ZF4 命令

FROM repo/jdk8

ADD target/app.jar app.jar

#CMD [ "java", "-jar", "/app.jar" ] 

CMD ["/bin/bash", "-c", "java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps/heap-dump/app-heap-dump$(date +-%Y-%m-%d-%H-%M-%S).hprof -jar  /app.jar "]

EXPOSE 5147

修改后,我將使用附加到堆轉儲文件名的時間戳來存儲堆轉儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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