一、服务停止调研
1. jvm排查

有可能是jvm配置参数导致的,然后在/var/log和/app/apache-tomcat-7.0.109/logs并没有找到jvm致命错误日志(hs_err_pid.log)
接着查看/app/apache-tomcat-7.0.109/bin/catalina.sh中的jvm配置的参数

JAVA_OPTS="-Xms4096m -Xmx4096m -Xss1024K -Xmn1536m -XX:PermSize=64m -XX:MaxPermSize=256m"

在这里插入图片描述
服务器参数

服务器型号CPU内存硬盘
redhat7.64c8G100G

jvm配置参数也合理

又排除了GC情况,使用 jstat -gc pid 5000查看也没发现问题

2. 日志排查

原因:日志中存在不明进程销毁日志,如下:
十二月 19, 2022 11:52:08 上午 org.apache.coyote.AbstractProtocol pause
信息: 暂停ProtocolHandler[“http-bio-8080”]
{“@timestamp”:“2022-12-19T11:52:08.596Z”,“LogId”:“”,“level”:“INFO “,“threadID”:“19”,“threadName”:“DubboShutdownHook”,“ip”:“192.168.105.6”,“class”:”?”,“method”:“”,“Line”:“”,“applicationName”:“pis-business”,“type”:“pis”,“message”:" [DUBBO] Unregister: dubbo://192.168.105.6:20088/com.gblfy.fis.PisInsureDubboService?anyhost=true&application=dubbo&default.timeout=300000&dubbo=2.0.1&generic=false&interface=com.gblfy.fis.PisInsureDubboService&methods=getError,service,getResult&owner=lis&pid=18558&revision=1.0-SNAPSHOT&side=provider&timestamp=1671421921242, dubbo version: 2.0.1, current host: 192.168.105.6"}
十二月 19, 2022 11:52:08 上午 org.apache.catalina.core.StandardService stopInternal
信息: 正在停止服务[Catalina] EncodeingKafka is close
十二月 19, 2022 11:52:08 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
严重: The web application [/pis-business-gblfy-1.0-SNAPSHOT] appears to have started a thread named [DubboRegistryFailedRetryTimer-thread-1] but has failed to stop it. This is very likely to create a memory leak.
十二月 19, 2022 11:52:08 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
严重: The web application [/pis-business-gblfy-1.0-SNAPSHOT] appears to have started a thread named [DubboZkclientConnector-SendThread(192.168.105.201:2181)] but has failed to stop it. This is very likely to create a memory leak.
严重: The web application [/pis-business-gblfy-1.0-SNAPSHOT] appears to have started a thread named [Log4j2-TF-3-AsyncLoggerConfig-4] but has failed to stop it. This is very likely to create a memory leak.
十二月 19, 2022 11:52:08 上午 org.apache.coyote.AbstractProtocol stop
信息: 正在停止ProtocolHandler [“http-bio-8080”]
十二月 19, 2022 11:52:08 上午 org.apache.coyote.AbstractProtocol destroy
信息: 正在摧毁协议处理器 ["http-bio-8080"]

3. 推测与ssh会话有关

怀疑与ssh会话有关,我用的是windows+SecureCRT/xshell

二、ssh会话强制退出验证
2.1. 手动强制关闭进程1

启动 tomcat服务

cd /app/apache-tomcat-7.0.109/
sh bin/startup.sh

手动在任务管理中强制关闭SecureCRT/xshell的进程,再登录SecureCRT/xshell,使用grep查看运行的tomcat,发现tomcat依然运行。

ps -ef|grep java 
root      18895     1  1 11:52 ?        00:00:39 /app/jdk1.8.0_301/bin/java -Djava.util.logging.config.file=/app/apache-tomcat-7.0.109/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms4096m -Xmx4096m -Xss1024K -Xmn1536m -XX:PermSize=64m -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8851 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.105.6 -Dignore.endorsed.dirs= -classpath /app/apache-tomcat-7.0.109/bin/bootstrap.jar:/app/apache-tomcat-7.0.109/bin/tomcat-juli.jar -Dcatalina.base=/app/apache-tomcat-7.0.109 -Dcatalina.home=/app/apache-tomcat-7.0.109 -Djava.io.tmpdir=/app/apache-tomcat-7.0.109/temp org.apache.catalina.startup.Bootstrap start
2.2. 手动强制关闭进程2

启动 tomcat服务并查看日志

cd /app/apache-tomcat-7.0.109/
sh bin/startup.sh &  tail -f logs/catalina.out 
  • 1直接关闭tomcat启动窗口,重新登陆,tomcat服务进程已关闭。
  • 2直接通过任管理窗口强制关闭SecureCRT/xshell的进程,再登录SecureCRT/xshell,使用grep查看运行的tomcat,发现tomcat服务已经停止运行。
  • 3脚本启动
    Tomcat 一键启停脚本 linux
    直接通过任管理窗口强制关闭SecureCRT/xshell的进程,再登录SecureCRT/xshell,使用grep查看运行的tomcat,发现tomcat服务已经停止运行。
2.3. 总结归纳与解决方案

启动tomcat服务时,如果通过多条shell脚本执行多条命令的话,关闭当前启动窗口或者强制关闭SecureCRT/xshell的进程,再登录SecureCRT/xshell,使用grep查看运行的tomcat,就会发现tomcat服务已经停止运行。

  • 解决方案
    第一种:启动tomcat 直接使用sh bin/startup.sh启动tomcat服务
    第二种:脚本启动单条命令执行tomcat启动
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐