【发布时间】:2017-05-31 15:15:20
【问题描述】:
我想为我的 Spring Boot 应用程序启用 JMX,并尝试了所有方法但没有成功。我认为,问题在于,我正在使用spring-boot-maven-plugin 的repackage 选项。
目前我做了以下事情:
export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1617 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1"
java -jar target/myapp-1.0.0.jar
但是当我启动应用程序时,它没有侦听端口 1617。我无法从 JMX 客户端连接,ss -tulpen 也没有列出该端口。
我也试过直接传递-D...参数。我还用--com.sun... 尝试过,并认为Spring boot 可以这样处理它们。我还在多台机器上尝试了许多其他的东西,但没有成功。
一些进一步的信息:
- 我的应用程序不使用任何
spring-boot父级。 - 我正在 ArchLinux 系统上尝试这个。
- 我没有任何特殊的 iptables 配置,所有端口都应该在配置的 ip 上可用。
- Spring Boot 版本:1.4.1.RELEASE
- Java 版本:
openjdk version "1.8.0_112"
我做错了什么,在哪里可以找到相关帮助的文档?
更新:我添加了一些用于读取和打印传递的JAVA_OPTS 的行(如here 所述)。当我通过 IntelliJ 启动应用程序并将 VM 选项设置为上面的 JAVA_OPTS 值时,它可以工作。打印传递的选项,VM 正在侦听端口 1617。当我使用 java -jar my.jar -Dcom.sun.... 启动应用程序时,未打印参数,VM 仍未侦听端口 1617。
【问题讨论】:
-
我认为您正在使用 wrong way 来传递 JMX 参数。尝试在
java命令之后直接传递它们。 -
“它不监听 1617 端口”是指无法连接还是在 netstat 中查找过?
-
@MaximDobryakov 如前所述。我已经这样做了。我也用
java -Dcom.sun.... -jar ...运行了java 命令。 -
@chrylis
ss是新的netstat。所以无法连接,netstat/ss没有列出来 -
当内核 13.0 删除 proc 条目时,我将切换到
ss。离开我的草坪!
标签: java linux spring spring-boot