2017年6月24日晨,打开IntelliJ之后,准备调优一段Java代码,Maven install之后,将代码部署到Tomcat中,启动的时候,发生了
Error running Tomcat8: Address localhost:1099 is already in use
分析:1099端口被占用了(1099为JMX端口)。
考虑的解决方案:1、释放被占用的1099端口;2、为JMX开启其他未被占用的端口。
bogon:~ onefish$ sudo lsof -P -i tcp:1099
运行后无任何结果。尝试
bogon:~ onefish$ sudo lsof -P -i
展示全部的占用情况,未发现1099被占用。
选择采取方案2,为Tomcat的JMX修改端口,选取了1090。仍旧出现开篇的错误,对其进行端口占用情况诊断也未发现异常。
这时候我陷入了深思...... 冒出两个方案:
1、彻查Tomcat的Log,分析前因后果;2、删点当前的Tomcat,重新安装。
灵光一闪,选择了方案2。把Library中的Tomcat 8.5.15版本直接删除。从http://tomcat.apache.org/download-90.cgi 下载了Tomcat 9.0.0.M21 (Binary Distributions/Core/Zip)。
bogon:Library onefish$ unzip /Users/onefish/Downloads/apache-tomcat-9.0.0.M21.zip
bogon:Library onefish$ chmod 755 apache-tomcat-9.0.0.M21/bin/*.sh
bogon:Library onefish$ sh apache-tomcat-9.0.0.M21/bin/startup.sh
Using CATALINA_BASE: /Users/onefish/Library/apache-tomcat-9.0.0.M21
Using CATALINA_HOME: /Users/onefish/Library/apache-tomcat-9.0.0.M21
Using CATALINA_TMPDIR: /Users/onefish/Library/apache-tomcat-9.0.0.M21/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
Using CLASSPATH: /Users/onefish/Library/apache-tomcat-9.0.0.M21/bin/bootstrap.jar:/Users/onefish/Library/apache-tomcat-9.0.0.M21/bin/tomcat-juli.jar
Tomcat started.
在Chrome浏览器中,输入 localhost:8080,回车!
localhost 拒绝了我们的连接请求。ERR_CONNECTION_REFUSED
为了精确地判断Tomcat的状态,运行了两个命令:
bogon:~ onefish$ sudo lsof -P -i tcp:1099
bogon:~ onefish$ sudo lsof -i -P | grep -i "Java"
都是无返回结果。显然,以上弄的都白瞎了。怎么办呢?先重启一下Mac,冷静一下。
重启Mac后,重复上述步骤还是有问题。这时候只能寄希望从Tomcat的Log中看出点端倪了。这时候的IntelliJ的output窗口没有任何输出,仍然显示之前的错误。
去Tomcat的Logs看看,用Brackets打开了catalina.2017-06-24.log
又打开了localhost.2017-06-24.log看一下
localhost.2017-06-24.log
问题比较明确了,在catalina.2017-06-24.log的第39行,可以看到出现了:
java.net.BindException: Can't assign requested address (Bind failed)
Bind不成功?不成功?不成功?不知道咋回事,去百度一下吧
找到了相似的三篇文章进行了参考:
http://blog.csdn.net/wang1144/article/details/7634232
http://blog.csdn.net/dcwyiqpl/article/details/8158588
http://blog.csdn.net/ligang2585116/article/details/43796371
解决思路都是去关注本机的hosts配置。并关注127.0.0.1在该文件中的映射情况。
bogon:Library onefish$ vi /etc/hosts
显示的结果如图:
hosts
what?
127.0.0.1 windows10.microdone.cn 是什么鬼?
先放着,先解决Tomcat的问题。
在hosts文件中添加
127.0.0.1 localhost
在IntelliJ中试一下Tomcat,成功了~
从Console看相关信息的展示如下:
bogon:~ onefish$ sudo lsof -itcp:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Google 630 onefish 114u IPv4 0xd16f75c26a8fe047 0t0 TCP localhost:64617->localhost:http-alt (CLOSE_WAIT)
Google 630 onefish 139u IPv4 0xd16f75c26a7e2d1f 0t0 TCP localhost:64618->localhost:http-alt (CLOSE_WAIT)
java 19574 onefish 58u IPv6 0xd16f75c2630f3e8f 0t0 TCP *:http-alt (LISTEN)
bogon:~ onefish$ sudo lsof -itcp:1099
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 19574 onefish 24u IPv6 0xd16f75c25eafe92f 0t0 TCP *:rmiregistry (LISTEN)
bogon:~ onefish$ sudo lsof -i -P | grep -i "Java"
java 19567 onefish 34u IPv6 0xd16f75c2630f4eaf 0t0 TCP *:5664 (LISTEN)
java 19567 onefish 78u IPv6 0xd16f75c25d12c3cf 0t0 TCP *:64591 (LISTEN)
java 19567 onefish 79u IPv6 0xd16f75c2630f494f 0t0 TCP localhost:64622->localhost:64593 (ESTABLISHED)
java 19573 onefish 124u IPv4 0xd16f75c26a74f74f 0t0 TCP localhost:64607->localhost:64599 (ESTABLISHED)
java 19574 onefish 23u IPv6 0xd16f75c2630f392f 0t0 TCP *:64611 (LISTEN)
java 19574 onefish 24u IPv6 0xd16f75c25eafe92f 0t0 TCP *:1099 (LISTEN)
java 19574 onefish 27u IPv6 0xd16f75c25eafe3cf 0t0 TCP *:64612 (LISTEN)
java 19574 onefish 54u IPv6 0xd16f75c25eaff94f 0t0 TCP localhost:64611->localhost:64621 (ESTABLISHED)
java 19574 onefish 58u IPv6 0xd16f75c2630f3e8f 0t0 TCP *:8080 (LISTEN)
java 19574 onefish 62u IPv6 0xd16f75c2630f596f 0t0 TCP *:8009 (LISTEN)
java 19574 onefish 79u IPv6 0xd16f75c2630f2e6f 0t0 TCP localhost:8005 (LISTEN)
PS:
后期问题的分析:
Mac中有ShadowsocksX,有修改hosts的能力,是它干的吗?不确定,但感觉不是。
127.0.0.1 windows10.microdone.cn的问题从网上搜索得知,安装的网银控件的配置。我没安装。
好吧,见鬼,先这样吧,Tomcat能用就好。我最开始想干嘛来着?!
网友评论
但是我的tomcat中并没有提示java.net.BindException: Can't assign requested address (Bind failed)这样的信息。
现在还是不理解,为什么。。。
其实,这个问题的根源我没研究明白