Java 17搭配YourKit 2021.11 Docker环境运行报错咨询
问题解答
1. 查看/home/kek/.yjp/log/test-8.log文件内容的方法
- 若Docker容器仍处于运行状态,直接执行exec命令读取日志:
docker exec <你的容器ID/容器名称> cat /home/kek/.yjp/log/test-8.log - 若容器已经退出停止,可先将日志文件拷贝到宿主机再查看:
docker cp <你的容器ID/容器名称>:/home/kek/.yjp/log/test-8.log ./yjp-test-log.log
拷贝完成后直接在宿主机当前目录打开yjp-test-log.log即可。 - 若你在Docker配置中对
/home/kek/.yjp目录做了Volume挂载,直接到宿主机对应的挂载路径下查找日志文件即可,无需操作容器。
2. Java 17搭配YourKit 2021.11的运行说明
Java 17和YourKit 2021.11版本本身是兼容的,可正常运行,你遇到的报错大多是环境配置问题,可按以下要点排查:
- JVM启动参数补充:Java 17新增了模块强封装限制,需要额外添加启动参数开放模块权限给YourKit,参考参数如下:
java --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-opens=java.base/java.io=ALL-UNNAMED \ --add-opens=java.base/java.util=ALL-UNNAMED \ # 其余原有JVM启动参数、YourKit代理参数 - 基础镜像依赖检查:YourKit 2021.11依赖glibc运行库,如果你使用的是Alpine作为基础镜像,默认自带的musl libc不兼容,就会抛出你遇到的
std::system_error报错,可替换为Debian、CentOS等使用glibc的基础镜像,或自行给Alpine安装glibc兼容包。 - 目录权限检查:容器内运行Java进程的用户需要拥有
/home/kek/.yjp目录的读写权限,可在Dockerfile中提前创建目录并赋权:RUN mkdir -p /home/kek/.yjp && chown -R 运行用户:对应用户组 /home/kek/.yjp
内容的提问来源于stack exchange,提问作者Serhii Zadorozhnyi
相关产品推荐
相关产品推荐

