SEVERE: Could not contact localhost:8005. Tomcat may not be running. Connection refused (Connection

如果你用的是JDK1.8,那么这篇文章适合你。

(其他版本也说不定适用呢)

#####运行./shutdown 停止tomcat报错,报错信息:
May 27, 2018 8:53:04 PM org.apache.catalina.startup.Catalina stopServer
SEVERE: Could not contact localhost:8005. Tomcat may not be running.
May 27, 2018 8:53:04 PM org.apache.catalina.startup.Catalina stopServer
SEVERE: Catalina.stop:
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.(Socket.java:434)
at java.net.Socket.(Socket.java:211)
at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:505)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:430)

网上搜罗了一整天资料教程,网上各种端口号、tomcat没有启动问题的解决方案终试无果,终于,在stackoverflow找到一个可行的答案!!!
链接:https://stackoverflow.com/questions/36566401/severe-could-not-contact-localhost8005-tomcat-may-not-be-running-error-while

解决方案:找到 jdk1.8.xx 的安装路径,修改其子目录 /jre/lib/security/ 下的 “java.security” 文件中的 “securerandom.source=file:/dev/random” 为 "securerandom.source=file:/dev/./urandom "

更新:直接修改jdk的配置是有点过分,已发现另一种解决方案,见文末,go

1、找到jdk的路径
依次使用命令 which java 然后 ls -lrt /usr/bin/java 然后 ls -lrt /etc/alternatives/java 最终得到的结果前面部分才是jdk的路径,即“/usr/java/jdk1.8.0_172-amd64”
这里写图片描述
2、进入 /usr/java/jdk1.8.0_172-amd64 /jre/lib/security/ 目录下(cd /usr/java/jdk1.8.0_172-amd64/jre/lib/security/
3、找到“java.security”文件并编辑 (vi java.security
4 、 将 "securerandom.source=file:/dev/random"
修改为 "securerandom.source=file:/dev/./urandom ",保存退出(按esc,输入":wq",回车)
(在 vim 中进行文本搜索:输入"/",再输入关键词,回车,按“n”向下查找匹配词,按“N”向上查找匹配词;
eg:输入“/securerandom.source”,回车,按“n”直到找到“securerandom.source=file:/dev/random”)
5、分分钟 shutdown、startup。


搞定


20190614更新

评论许多朋友在问为什么,特来补刀一波
强调一下,解决方案出至stackoverflow的问答
链接:https://stackoverflow.com/questions/36566401/severe-could-not-contact-localhost8005-tomcat-may-not-be-running-error-while
回答者表示这个问题可能为jdk8的bug。博主只能信了,尴尬

特意查下/dev/random和/dev/urandom的区别,简单粗暴讲,就是/dev/random追求较高的随机性和安全性,所以要算啊算啊,花时间;而/dev/urandom随机性稍逊色一丢丢,好在计算速度快啦。
到这里为什么会导致文中的问题,相信大家都懂了吧哈哈。(再简单粗暴讲,就是一个快,一个慢,慢到变形那种,导致程序假死一直挂着)至于,为什么会有这两个东东,到底有什么区别影响啥啥的,大家自行发挥扩展啦

另外,直接修改jdk的配置是有点过分,经过深刻研究,博主发现了另一种解决方案

另一种解决方案:修改 tomcat 的 cataline.sh文件,增加一行配置即可。

在catalina.sh的第一行增加 JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom 即可。

JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom

over over

你可能感兴趣的:(异常小记)