诡异的脚本
做完上面的优化之后,我们感觉问题应该解决了,但过了一段时间后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
版权归作者所有,转载请注明出处