StandardServer.await: create[8005]: java.net.BindException问题原因分析

问题描述:

 启动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修改成另一个端口,避免使用被占用的端口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

=PNZ=BeijingL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值