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 不能正常关闭

linux使用shutdown.sh命令关闭不完tomcat进程的处理方法

mac安装tomcat,找不到catalina.sh

Tomcat关闭日志输出

Tomcat怎么关闭日志输出

Tomcat源码解析-启动过程分析之主干流程