如何运行Open Liberty且不启用ws-javaagent.jar Java代理(含Docker场景)
Open Liberty 跳过默认ws-javaagent加载的实现方法
该默认加载wlp/bin/tools/ws-javaagent.jar的配置,是Open Liberty为支撑配置热更新、应用热加载能力内置的默认JVM参数,可根据不同运行场景通过以下方式跳过加载:
官方Docker镜像场景的跳过方法
- 官方Docker镜像默认会把加载ws-javaagent的参数写入
JVM_ARGS环境变量,启动容器时可以直接覆写这个环境变量,移除代理加载配置 - 直接跳过代理的示例启动命令:
docker run -e JVM_ARGS="" -p 9080:9080 open-liberty:kernel-java17-openj9
给JVM_ARGS赋值空值后,镜像原有内置的代理加载参数会被完全覆盖,不会触发ws-javaagent的自动加载 - 注意不要通过叠加式的JVM参数变量(比如仅追加自定义参数的
JAVA_OPTIONS)启动,这类方式不会抹除原有默认的代理加载配置,代理依然会生效 - 如果是自定义构建的Open Liberty镜像,可以在Dockerfile中直接显式声明
ENV JVM_ARGS="",从构建阶段移除默认的代理加载参数
本地/物理机部署场景的禁用方法
- 定位到对应服务器实例的
jvm.options配置文件,默认路径为<Open Liberty安装根目录>/usr/servers/<你的服务器实例名>/jvm.options - 删除或注释掉文件中所有包含
-javaagent:<wlp安装路径>/bin/tools/ws-javaagent.jar的配置行 - 启动服务器前检查最终生效的JVM参数列表:不管是环境变量传入的参数、启动脚本内置的参数、还是
jvm.options里定义的参数,只要不存在指向上述ws-javaagent.jar路径的-javaagent配置,就不会加载该代理 - 可以通过启动时添加
-verbose:jni参数验证:在启动日志中检索ws-javaagent关键词,如果没有对应加载记录,就说明代理完全未生效
注意:禁用该代理后,Open Liberty内置的配置热更新、无需重启的应用类热替换能力会失效,后续修改服务器配置、替换应用包后,需要手动重启服务器才能让变更生效。
内容的提问来源于stack exchange,提问作者Sarang Ratnalikar
相关产品推荐
相关产品推荐

