【发布时间】:2014-06-25 05:49:14
【问题描述】:
我有一个启用了 JMX 监控的 Java 应用程序,如下所示:
-Dcom.sun.management.jmxremote.port=9999 \
// some other properties omitted
但是当我尝试重新启动应用程序时,有时我收到一条错误消息,提示 JMX 端口号已在使用中。这是不可接受的。
所以我想将底层套接字的 SO_REUSEADDR 设置为 true 以避免此错误,但没有找到相关的 JMX 属性。
有什么想法吗?
【问题讨论】:
-
您是否查看过哪个应用程序正在使用该端口?
-
我必须是我的应用程序。当我停止应用程序时,我认为绑定到此端口的套接字进入 TIME_WAIT 状态,以便 2MSL 实际关闭。所以我想让这个端口可重用。
-
SO_REUSEADDR 不能那样工作。它允许套接字侦听特定的 IP 地址并忽略其他地址。同一个应用程序运行了两次,或者有另一个应用程序占用了这个端口。
-
@BevynQ,如果我停止应用程序并且不立即启动它,然后我尝试启动应用程序,我可以工作。所以我认为这是套接字TIME_WAIT机制不允许
-
@NeilCoffey netstat 如果进程已经完成,则不会为“TIME_WAIT”命名进程,例如
tcp 0 0 localhost:57525 localhost:3100 TIME_WAIT -。通常还有一些关于 SO_REUSEADDR 的问题(如stackoverflow.com/q/3229860/602119),其中也提到了 TIME_WAIT 在答案中。
标签: java jmx restart shutdown reusability