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

作者: 灵魂函数 | 来源:发表于2017-06-25 17:12 被阅读568次

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

    相关文章

      网友评论

      • 阿森_打豆豆:我是专门注册简书来感谢吧主的 :+1:
        灵魂函数:@阿森_打豆豆 妈呀,太感谢你了,哈哈哈:kissing_heart:
      • 91fc0c831a84:救命了哥!!!!我去!!!
        灵魂函数:言重了,能帮你解决问题就好:stuck_out_tongue_closed_eyes:
      • 咬狼尾巴的兔子ZM:搜了一圈网上的解决方案,在这篇里找到思路解决了。
        但是我的tomcat中并没有提示java.net.BindException: Can't assign requested address (Bind failed)这样的信息。
        现在还是不理解,为什么。。。
        灵魂函数:问题解决了嘛?
        其实,这个问题的根源我没研究明白:grin:
      • c8073df33ab1:解决了 谢谢
        灵魂函数:解决就好~:grin:

      本文标题:记一次Mac IntelliJ中Tomcat崩溃的怪异现象(分析

      本文链接:https://www.haomeiwen.com/subject/quglcxtx.html