Tomcat 关闭不会终止进程

Tomcat 关闭不会终止进程

我的 tomcat 实例出现了一些问题。我在 Linux 上使用 apache-tomcat-6.0.20。我的操作系统是 CENTOS

当我执行命令时

# bin/shutdown.sh

它不会关闭正在运行 tomcat 的进程。

有人能告诉我一些想法吗?这个过程是怎样的?

答案1

我在 Tomcat 中多次遇到过此问题。以下几件事可能有所帮助:

  1. 等待一段时间以确保进程确实没有关闭;Tomcat 关闭脚本会尝试进行干净关闭,如果 Tomcat 服务器在调用关闭脚本时打开了大量线程,则可能需要一段时间。如果花费的时间超过 5 到 10 分钟,则可能是存在其他问题。
  2. 查看日志文件(通常是 Tomcat 主目录下的 logs/catalina.out)——十有八九你会找到指向潜在问题的线索。如果你需要更多帮助,请直接在此处发布错误消息。

答案2

您的系统是否无法关闭?(即挂起?)如果没有,那么它肯定正在关闭进程,只是方式可能不是您想要的。启动脚本是您编写的还是包含在软件包中?假设您已经对 /etc/init.d 脚本进行了一些操作,这样正确吗?您需要向我们提供更多信息。

很可能,您需要使用 chkconfig 注册该进程。仅将 Kscripts 放入 /etc/rc#.d/ 是不够的,因为我认为如果 chkconfig 不知道它们,它们就不会被调用。

本质上,你的脚本需要在顶部写几行说明

# chkconfig:345 99 10
# 描述:这就是我的脚本所做的。

第一行说明应在哪个运行级别启动,以及优先级启动和关闭级别。(它将在 /etc/rc3.d、/etc/rc4.d 和 /etc/rc5.d 中创建 S99 脚本,并在其余所有脚本中创建 K10 脚本)

除此之外,chkconfig 还会检查 /var/lock/subsys/ 中是否有适合您服务的锁定文件。因此,在服务启动时,触摸该目录中与您的服务同名的文件,并在服务退出时将其删除。

假设您的脚本中包含上述内容,则必须使用 chkconfig 注册该脚本。要添加脚本,请执行chkconfig --add <name>。只需确保脚本位于 /etc/init.d/ 中且具有正确的名称即可。

答案3

您是否安装了分析功能?Tomcat 有一个已知的分析问题,即如果安装了它,它无法正常关闭。有一个针对 shutdown.sh 脚本的解决方法,但我自己仍在寻找它。这是在 Tomcat 7 中,不知道它是否也在 Tomcat 6 中。

答案4

关闭 tomcat 的最佳方法是使用关闭脚本。但许多人遇到问题,最终手动终止进程。

仅当关机过程中涉及的脚本符合以下任一条件时,关机脚本才能正常工作:

  1. 归用户所有。
  2. 由用户的主要组拥有

如果用户属于次要组,则此方法无效。

如果您必须选择终止进程,则可以使用下面提到的脚本将其作为单个命令(查找进程然后终止它)。只需将其放入脚本中并在您想要终止正在运行的 tomcat 时运行它即可。

#Finds the tomcat process id
ps aux | grep tomcat | grep JavaVirtualMachines | awk -F  " " '{print $2}' > tomcatProcessID

#Kills the process id returned from above mentioned command.
kill -9 `cat tomcatProcessID` && tput setaf 3 && echo "Tomcat killed Successfully" ;rm -rf tomcatProcessID

#Not a mandatory command.
#Used to show all the remaining processes with 'tomcat' keyword in it.
#To inform on the console that the tomcat (running ess or indexer) is killed.
ps aux | grep tomcat | grep -v grep | grep -v killtomcat

如果您愿意,您可以ps aux | grep tomcat | grep -v grep | grep -v killtomcat在末尾添加以显示尝试终止后剩余的 tomcat 进程。

我希望它有帮助。

相关内容