记一次Mac IntelliJ中Tomcat崩溃的怪异现象(分析与解读)

96
灵魂函数
2017.06.25 17:12* 字数 605

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

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能用就好。我最开始想干嘛来着?!

Web note ad 1