一个脚本引发的血案

时间:2022-09-20 07:25:45

诡异的脚本

做完上面的优化之后,我们感觉问题应该解决了,但过了一段时间后tomcat又诡异的挂了,继续分析gc情况,分阶段使用jmap -dump:live,format=b,file=dump.hprof xxx命令生成堆转储快照来对比堆内存使用情况,监控线程使用情况,均发现没有问题。这个问题困扰了我们好几天,每天都监控这端口,一但发现tomcat down之后马上通知运营人员重启。一方面我们也查阅了各种资料,到网上查找各种tomcat自动down的原因,一一在我们服务器进行了测试、修复均不起作用。

终于在google各种tomcat down原因的时候发现了这么一篇文章Tomcat进程意外退出的问题分析,立刻想起了我们最近使用的一个脚本来,因为我们的tomcat禁止了通过bat文件来关闭,因此为了启动方便我们写了一个脚本文件,方便通过脚本来启动、停止、重启tomcat文件,这是这个脚本导致tomcat down的原因,不不,不叫原因叫元凶!脚本内容如下:

#!/bin/sh # eg: tomcat.sh start xxx # proc_dir="/usr/local/xxx/tomcat-zc-web/bin" proc_name=$2 if [ x$proc_name != x ] then proc_dir=${proc_dir//xxx/$proc_name} fi #echo $proc_dir function stop () { kill -9 `ps -ef |grep $proc_dir |grep -v grep|awk '{print $2}'` } function start () { cd $proc_dir ./startup.sh tail -300f /usr/local/logs/tomcat-business/$proc_name.log } case $1 in start) start;; stop) stop;; restart) stop start;; esac

就是因为tail -300f /usr/local/logs/tomcat-business/$proc_name.log这一句导致的问题,在别的项目使用的时候其实是没有这一句的,一般在使用的步骤是:

  • 1 执行tomcat.sh start xxx启动tomcat,
  • 2 执行tail -300f /usr/local/logs/tomcat-business/xxx.log 查看启动日志是否成功。

在这次投产的时候为了省一步操作,就将执行查看日志的命令,直接加在了启动命令的后面,当执行tomcat.sh start xxx这个命令的时候,即启动的tomcat,也自动会打印出tomcat的日志,那时候的想法非常好。

原因是,使用脚本命令启动后因为使用了tail -300f xxx 命令,tomcat的进程会成为shell脚本的子进程,这样的话,如过shell脚本停止的话,系统会自动杀掉tomcat进程导致tomcat down掉,在我们的脚本中去掉这条命令tomcat就正常了,更深层次的原因参考Tomcat进程意外退出的问题分析这篇文章,文章的内容还是分析的比较透彻,最后感觉阿里的技术真的很牛X,这篇文章也是出自于阿里的员工。

经历这么些波折,后续的tomcat服务终于稳定了下来


作者:纯洁的微笑
出处:https://www.cnblogs.com/ityouknow/p/6392426.html
版权归作者所有,转载请注明出处