问题描述:
启动JBoss的时候一直失败, 查看后台日志发现存在BindException: Cannot assign requested address: JVM_Bind异常。 详细报错如下
2022-2-28 10:01:06 org.apache.catalina.core.StandardServer await
严重: StandardServer.await: create[8005]:
java.net.BindException: Cannot assign requested address: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
at java.net.ServerSocket.bind(ServerSocket.java:328)
at java.net.ServerSocket.<init>(ServerSocket.java:194)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:373)
at org.apache.catalina.startup.Catalina.await(Catalina.java:662)
at org.apache.catalina.startup.Catalina.start(Catalina.java:614)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
原因分析:
从日志上看 PlainSocketImple,L383报错, 此处实现socketBind此方法是native方法,从日志上看create[8005] 可能是端口8005被占用引起的报错, 8005 正式Tomcat使用的端口
private native void socketBind(InetAddress address, int port)
throws IOException;
protected synchronized void bind(InetAddress address, int lport)
throws IOException
{
socketBind(address, lport);
if (socket != null)
socket.setBound();
if (serverSocket != null)
serverSocket.setBound();
if (address.isAnyLocalAddress()) {
anyLocalBoundAddr = address;
}
}
查看apache-tomcat-xxxx/conf
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
.....
所以怀疑是Tomcate启动的时候8005端口已经被其他程序占用,使用命令查看8005端口占用情况,发现本机端口8005并没有被使用
C:\Windows\system32>netstat -ano|findstr "8005"
C:\Windows\system32>
C:\Users\10001874>ipconfig
Windows IP 配置
以太网适配器 本地连接 12:
IPv4 地址 . . . . . . . . . . . . : 192.168.20.43
此时有点蒙,并不是端口占用引起的问题, 后来想起一件事儿, 最近公司网络在调整路由,造成我的IP会经常发生变化, 使用ipconfig 查询自己端口 发现自身的IP已经变成 192.168.20.43
查看etc 配置C:\Windows\System32\drivers\etc\host6s文件,发现如下配置
192.168.20.134 localhost
因此,猜测原IP为192.168.20.134,后来因路由发生了变化重新获取IP后得到了另一个IP地址192.168.20.43, 启动Tomcat的时候,通过localhost 路由到错误的IP后引发了Cannot assign requested address: JVM_Bind错误 ,修改为正确IP后问题得到解决
解决方案:
修改C:\Windows\System32\drivers\etc\host6s文件 将IP修改为当前IP后问题解决
192.168.20.43 localhost
此问题可能有2个问题原因
第一:和上述问题一样,需要修改etc错误的IP配置
第二:8005端口被占用,需要停止使用端口8005的进程将端口释放或者修改apache-tomcat-xxxx/conf上配置的端口8005修改成另一个端口,避免使用被占用的端口