正常Tomcat开启关闭是使用bin文件夹下的 start.sh和shutdown.sh脚本进行。最近项目中部署无法正常关闭,每次都需要用kill命令关。不太正常,就想研究一下是什么原因导致的。
使用./shutdown.sh关闭,首先报的问题是9004端口占用。
1、9004端口占用
查看9004端口是谁被占用:
lsof -i:9004
netstat aux|grep 9004
显示的pid是Tomcat的。
后来发现是在配置远程连接的时候,配置了远程端口为9004。
解决办法: 修改catalina.sh中的JAVA_OPTS为CATALINA_OPTS。
再./shutdown,问题变为了拒绝连接,看来修改生效了。
2、java.net.ConnectException: 拒绝连接
找到tomcat的pid: ps -ef|grep tomcat
通知tomcat的线程自己停止: kill -3 <tomcatpid>
再关闭tomcat: ./shutdown.sh
可以根据上图看到,结果Tomcat关掉了。
为什么呢?
知识点归纳:
Tomcat中的JAVA_OPTS和CATALINA_OPTS参数的区别是什么?
kill -3 <pid> 命令代表什么意义?
总结:
思考-->验证-->总结-->提高。
参考文章:
https://stackoverflow.com/questions/11222365/catalina-opts-vs-java-opts-what-is-the-difference
https://stackoverflow.com/questions/13946753/apache-tomcat-shutdown-java-net-connectexception-connection-refused
http://blog.csdn.net/shaokai132333/article/details/51714868
https://stackoverflow.com/questions/10941524/is-my-8080-being-listened