`
can_do
  • 浏览: 249154 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于【Caused by: java.net.BindException: Address already in use: JVM_Bind】

阅读更多
关于【Caused by: java.net.BindException: Address already in use: JVM_Bind】,你了解多少?


(1)、首先检查预期的监听端口号是否被占用?

(2)、还需要检查任意端口是否被占用?

因为,通过createServerSocket创建一个tcp监听时,除了指定目标端口号外,还需要listen一个任意端口号,

但这个任意端口,你是无法知道的,不像你的目标端口号。此时就需要修改目标端口号,尽管不是因为

目标端口号被占用,这个动作可以导致任意端口号的监听被改变,从而避免此问题的出现。

比较如下:



【解释如下】

JMX代理是导致随机端口号发生的根本原因,
当JVM中设置参数为【-Dcom.sun.management.jmxremote】时,会在一个随机端口上开启监听,供本地访问jmx使用,==>本地管理和监控
当JVM中设置参数为【-Dcom.sun.management.jmxremote.port=portNum】时,会开启两个监听端口号,一个为随机的,另一个为指定的<porNum>,指定的端口是为了进行远程jmx访问的。==>远程管理和监控
配置样例如下:
【-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.hostname=10.40.120.165】
如果不想看到这些随机端口号,你可以将jmx代理关掉,即不在JVM参数中添加【-Dcom.sun.management.jmxremote】相关属性。

但是即使不加该属性为true,通过jconsole还是可以本地访问jmx的,即任意端口号不完全针对本机jmx监控而开启监听的,仅和远程代理相比较而言。不能理解成,没有任意端口监听开启,本地jmx监控就访问不到。



【相关参考】

http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics