首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将时间戳添加到运行在kubernetes pod中的java应用程序生成的堆转储文件名中。

将时间戳添加到运行在kubernetes pod中的java应用程序生成的堆转储文件名中。
EN

Stack Overflow用户
提问于 2022-08-09 11:12:44
回答 1查看 162关注 0票数 0

我想在堆转储文件名之后添加一个时间戳。当我在运行以下命令时指定-XX:HeapDumpPath选项时,它可以工作:

代码语言:javascript
复制
java -Xmx64m  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=outputFilename.$(date +_%m%d%Y.%H:%M:%S).bin -jar app.jar

但是,当在Kubernetes服务上设置此选项时,yml文件无法工作。下面是在yml文件中定义的选项:

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

当尝试创建堆转储时,它将引发下面的错误。

代码语言:javascript
复制
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

谢谢你的帮助。

向你问好兰多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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文件中删除了下面的行:

代码语言:javascript
复制
 - 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命令,如下所示:

代码语言:javascript
复制
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

修改后,我将使用附加在堆转储文件名上的时间戳来存储堆转储。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73290884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档