欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-17 12:51:28
...
关于【Caused by: java.net.BindException: Address already in use: JVM_Bind】,你了解多少?
关于【Caused by: java.net.BindException: Address already in use: JVM_Bind】
            
    
    
        jvmsocketjmx 

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

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

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

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

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

比较如下:
关于【Caused by: java.net.BindException: Address already in use: JVM_Bind】
            
    
    
        jvmsocketjmx 


【解释如下】

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
相关标签: jvm socket jmx