关于tomcat7下shutdown无法正常关闭服务的解决方案
问题:
在停止tomcat运行,一般普遍会选择bin目录下shutdown.sh,但实际情况会导致tomcat无法停止。原因Tomcat启动以后,会启动6条线程:
"ajp-bio-8009-AsyncTimeout" daemon prio=5 tid=7f8738afe000 nid=0x115ad6000 waiting on condition [115ad5000]
"ajp-bio-8009-Acceptor-0" daemon prio=5 tid=7f8738b05800 nid=0x1159d3000 runnable [1159d2000]
"http-bio-8080-AsyncTimeout" daemon prio=5 tid=7f8735acb800 nid=0x1158d0000 waiting on condition [1158cf000]
"http-bio-8080-Acceptor-0" daemon prio=5 tid=7f8735acd000 nid=0x1157cd000 runnable [1157cc000]
"ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=5 tid=7f8732850800 nid=0x111203000 waiting on condition [111202000]
"main" prio=5 tid=7f8735000800 nid=0x10843e000 runnable [10843c000]
其中5条是Dameon线程,而tomcat下shutdown时,并非将main这条Dameon线程终止,而是在配置的端口上通过ServerSocket来监听一个请求的到来,如果请求的字符串和配置的字符串相同的话即跳出循环,这样的话就会运行stop方法,运行完了以后,main线程就退出了。
解决方案:
- 首先在任何可访问目录下创建一个pid目录
- 然后在tomcat bin/catalina.sh文件下面添加CATALINA_PID=/home/app/tomcats/pid/(唯一).pid
- 然后在服务器目录下创建一个tomcatstart.sh文件
bin/catalina.sh start
,用于tomcat启动 - 同时在服务器目录下创建一个tomcatstop.sh文件
bin/catalina.sh stop -force
,用于tomcat停止
问题解决,无需kill
PS:首先必须先创建pid文件目录