Tomcat 通过 catalina.sh 关闭的流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat 通过 catalina.sh 关闭的流程相关的知识,希望对你有一定的参考价值。
参考技术A 以下是 tomcat startup.sh 启动脚本最终调用的启动方法,org.apache.catalina.startup.Catalina#start:可以看到,上面方法最后是调用了 org.apache.catalina.core.StandardServer#await() 方法:
这里 StandardServer#await() 方法根据 server.xml 中的 Server 节点 port 配置分了几种情况进行处理:
一般来说,我们常用的有两种关闭 tomcat 的方式,一种是用官方提供的关闭脚本 shutdown.sh 进行关闭,另一种时通过 kill -x [pid] 进行关闭。
查看 shutdown.sh 脚本的内容,发现最终是调用了 BootStrap#main 方法进行关闭,传的是 "stop" 作为参数。改传参会导致调用 Catalina#stopServer 方法。
具体步骤是:初始化组件 -> 获取 Server 组件 -> 新建 socket 客户端 -> 发送消息至 socket 服务端
显然,这里对应的是 StandardServer#await() 方法的情况3,发送的字符串使得主线程结束阻塞状态,调用各组件的 stop() 和 destroy 方法对资源进行释放。
kill -x 的方式常用的有 kill -9 和 kill -15,相对来说,kill -9 会立即强制结束当前进程,这个操作既方便,但同时也极具破坏性;另外 kill -15 会向进程发送一个 TERM 的中断信号量,再JVM接收到该信号量后,会响应中断,从而结束该进程。JVM在结束当前进程前,会执行一系列名为 shutdownhook 的线程,而 Tomcat 在启动时,会向JVM注册了一个名为 CatalinaShutdownHook 的线程,该线程方法内调用了 Catalina#stop() 方法。
Tomcat怎么关闭日志输出
tomcat中禁用catalina.out的输出,又可能很大。
1、直接修改catalina.sh文件的输出语句。
在文件中找到以下内容。
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
输入到/dev/null黑洞,上面内容修改成下面内容。
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT=/dev/null
以上方法可以解决禁用catalina.out的输出。
2、修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。
将level级别设置成WARNING就可以大量减少日志的输出,当然也可以设置成OFF,直接禁用掉。
3、关闭localhost_access_log日志
修改在tomcat的安装目录conf文件夹下server.xml里配置,将AccessLogValve注释掉:
最终运行结果就表示tomcat日志不再会有输出了:
以上是关于Tomcat 通过 catalina.sh 关闭的流程的主要内容,如果未能解决你的问题,请参考以下文章
linux tomcat shutdown.sh 不能正常关闭