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