最近遇到这个问题,
在Centos7.2下搭建了一个tomcat8,开始用的挺好,突然有一次shutdown.sh关闭tomcat时报错了,里面有8005啥的
以后再也用不了tomcat了,shutdown.sh永远失败,重启服务器也不行(云服务器)
(ps:最新发现,不是tomcat不能用了,是启动太慢了,我误认为不能用了,上述错误出现后,杀死tomcat进程或者重启服务器就可以解决,唉,小白苦逼啊)
最后找到原因:
tomcat在启动时会使用如下几个端口
其中8005端口使用的比较晚,也就是说,我们刚startup.sh的时候,使用netstat -tlpn查看,是没有8005端口的,过一段时间tomcat完全启动
之后,才会出现8005端口占用。
而出现我那种情况的原因是,在tomcat启动后,8005端口占用前,我就shutdown.sh了,就报错8005云云。。。
所以以后shutdown.sh的时候确保8005已占用就好了
20161014更新:
在8005端口启动前就shutdown.sh,导致了异常,为什么别人没有遇到?原来别人的tomcat在1s内就启动8005端口了,而我的tomcat启动为什么这么慢?
查看tomcat log
大红框为一次完整启动tomcat打印的log,图中可以看出耗时在小红框标记的地方,经搜索,终于找到启动慢的根源了,原来是计算随机数的时候阻塞了。。
详细说明点击http://blog.csdn.net/rankun1/article/details/52815960
解决方法:
直接配置jdk securerandom.source为urandom解决:
打开$JAVA_HOME/jre/lib/security/java.security这个文件,找到securerandom.source配置项
修改为:
securerandom.source=file:/dev/./urandom
好了好了,tomcat启动快了,800ms搞定,我没机会在8005启动前shutdown.sh了,不会异常了,
这个问题可折磨死小白我了,到此完美解决