Linux启动tomcat后,进程意外关闭

背景:Centos 7.9

应用:Tomcat 8.5.99,ssh 9.5

近期在生产环境遇到个诡异的事情,因安全漏洞问题,需要升级tomcat,升级tomcat之后,发现应用会随机宕机(后期发现这个随机和ssh的回话终止时间相关联)

查看catalina日志,日志输出如下

org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ROOT] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver], but could not unregister it when the web application was stopped. To prevent memory leaks, the JDBC driver has been forcibly unregistered.

似乎是内存不够,触发保护机制了,但是查看系统内存使用情况,内存应该是够用的;为了避免内存问题,调整 tomcat 内存使用参数等,结果无效;将不影响业务的进程暂时关闭,还是该日志输出;于是升级最新版本,仍然会随机宕机,继续查看日志,发现是tomcat主动关闭进程,毫无头绪。

结果!!!某次发现ssh关闭之后,应用随即关闭,多次测试之后,发现tomcat关闭时间和ssh会话关闭时间基本吻合,推断,可能是因为该应用进程处于ssh子进程之下,会随着当前关闭,于是采用后台运行的方式:

cd tomcat/bin && nohup ./startup.sh &

【以上操作无用】然而,并没有用,还是会随着ssh会话关闭而关闭进程

查看一些帖子,可能ssh的参数设置不对,会导致ssh进程关闭之后,子进程也会被ssh关闭,于是改变ssh的配置

/usr/lib/systemd/system/下sshd.service文件或者sshd.socket文件下,增加或修改,配置效果为当ssh进程关闭时,它的子进程交给根进程管理,从而避免退出,本服务器采用的是socket进行管理,于是修改sshd.socket:

vim /usr/lib/systemd/system/sshd.socket

[Socket]
KillMode=process

【以上操作无用】然而,并没有用,还是会随着ssh会话关闭而关闭进程

发现正常的 ./start.sh 启动,使用pstree查看进程树,其实进程树显示tomcat是属于systemd根进程管理的,这就不符合该配置要求,既然如此,为啥不直接将tomcat交给systemd管理,于是:

vim /usr/lib/systemd/system/tomcat.service

[Unit]
Description=xxxx-tomcat
After=network.target

[Service]
Type=forking
ExecStart=/bin/sh /xxxx/tomcat/bin/startup.sh
ExecStop=/bin/sh /xxxx/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

 【该操作生效】最后,这个方式生效,并且可以直接通过 systemctl 进行起停管理,由此怀疑可能是ssh内部某个机制和新版本tomcat存在某些不兼容,能力有限,只能推测到这个地步,欢迎大神补充根本原因!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值