我想在堆转储文件名之后添加一个时间戳。当我在运行以下命令时指定-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谢谢你的帮助。
向你问好兰多。
发布于 2022-08-25 11:56:57
我找到了解决这个问题的办法。不可能通过在yml中添加XX:HeapDumpPath=\"/dumps/heap-dump/demo-heap-dump$(date +_%m%d%Y.%H:%M:%S).bin\""来解决这个问题,因为它不会被执行。为了执行这一行$(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,而不是使用java命令,如下所示:
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修改后,我将使用附加在堆转储文件名上的时间戳来存储堆转储。
https://stackoverflow.com/questions/73290884
复制相似问题