我想在JVM启动时使用环境变量来设置-XX:HeapDumpPath
选项。此外,我希望它可以在Docker容器内工作,并且使JVM进程获得PID1。这似乎使this问题中提出的所有解决方案都对我的情况无效。
我当前的解决方案如下:
Dockerfile
FROM openjdk:10
COPY . .
ENTRYPOINT [ "./start.sh" ]
start.sh
#!/usr/bin/env bash
exec java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${HEAP_DUMP_PATH} -jar build/libs/app.jar
如果我使用docker build --tag=test .
构建它,然后使用CID=$(docker run --rm -e HEAP_DUMP_PATH="/tmp" -d test) && docker exec $CID ps -f
运行,则会得到:
UID PID PPID C STIME TTY TIME CMD
根1 0 0 16:18 00:00:00 java -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = / tmp -jar build / libs / app.jar
根21 0 0 16:18 00:00:00 ps -f
所以它似乎正在工作。但这似乎也不必要地复杂。有没有更好/更清洁的方法来实现这一目标?
更新:在-c
中删除了exec -c
。