自动发布脚本导致的Tomcat意外退出
来源:互联网 发布:java工程师月薪 编辑:程序博客网 时间:2024/06/05 09:49
最近公司项目的Dev环境要自己维护,为了避免麻烦,写了一个发布脚本,但是发现每次关闭和服务器的SSH连接后,Tomcat就意外退出,查看日志发现最后退出有如下几行日志:
Nov 10, 2017 2:38:35 PM org.apache.coyote.AbstractProtocol pauseINFO: Pausing ProtocolHandler ["http-nio-8080"]Nov 10, 2017 2:38:35 PM org.apache.catalina.core.StandardService stopInternalINFO: Stopping service Catalina[INFO][2017-11-10 14:38:35] org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:960) Closing WebApplicationContext for namespace 'Dispatcher-servlet': startup date [Fri Nov 10 14:37:53 CST 2017]; parent: Root WebApplicationContext [INFO][2017-11-10 14:38:35] org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:960) Closing Root WebApplicationContext: startup date [Fri Nov 10 14:37:52 CST 2017]; root of context hierarchy Nov 10, 2017 2:38:35 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreadsSEVERE: The web application [/] appears to have started a thread named [FileWatchdog] but has failed to stop it. This is very likely to create a memory leak.Nov 10, 2017 2:38:35 PM org.apache.coyote.AbstractProtocol stopINFO: Stopping ProtocolHandler ["http-nio-8080"]Nov 10, 2017 2:38:35 PM org.apache.coyote.AbstractProtocol destroyINFO: Destroying ProtocolHandler ["http-nio-8080"]
最开始怀疑是 OOM 问题,排查代码没有发现相关问题,JVM配置OOM后转存堆内存快照,也没有发现问题,后来发现规律是每次关闭SSH连接一会儿后Tomcat即关闭,度娘后发现如下文章:
tomcat进程意外退出的问题分析
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\data\heap\
解决方案
在脚本开始添加 set -m,使用监视模式。
问题原因
- SSH关闭后,操作系统kill掉脚本;
- Java进程挂在了脚本进程下面;
修改后的脚本
修改后的发布脚本:
#!/bin/sh# author qiesai##调用格式:base-war-deploy-tools.sh proName branchName profile ##命名规则:proName作为back、release、war的名称存在,要保持一致PRO_NAME=$1BRANCH_NAME=$2PROFILE=$3BASE_DIR=`pwd`CODE_DIR="/data/code/${PRO_NAME}/"RELEASE_DIR="/data/release/"BACKUP_DIR="/data/backup/"WAR_NAME="${PRO_NAME}.war";function stopTomcat(){ echo "_______________________________" echo "stop tomcat" TOMCAT_PID=`ps -ef|grep tomcat | grep -v 'grep\|tail' | awk '{print $2}'` if [ -n "$TOMCAT_PID" ]; then echo "tomcat is running : ${TOMCAT_PID} , will stop it" kill -9 $TOMCAT_PID fi COUNT=0 while [ $COUNT -lt 1 ]; do echo -e ".\c" sleep 1 COUNT=1 PID_EXIST=`ps --no-heading -p $TOMCAT_PID` if [ -n "$PID_EXIST" ]; then COUNT=0 break fi done echo "" echo "stop tomcat succes"}function buildProject(){ source /etc/profile echo "_______________________________" echo "pull git code" cd $CODE_DIR git branch -q $BRANCH_NAME git checkout $BRANCH_NAME git pull origin $BRANCH_NAME echo "_______________________________" echo "buil project" echo `/data/maven/maven/bin/mvn clean package -P${PROFILE}` echo "buil finish"}function releaseWar(){ echo "_______________________________" echo "deploy war" cd $RELEASE_DIR mv -f ./$WAR_NAME $BACKUP_DIR$WAR_NAME #注意不要 rm -rf /*也不要 cd到/下 rm -rf * mv -f $CODE_DIR/target/$WAR_NAME ./$WAR_NAME #set -m是解决Tomcat关闭的关键点。 set -m nohup /data/tomcat/bin/startup.sh & echo "deploy success"}function main(){ if [ -z "$PRO_NAME" ]; then echo "please input project name" exit; fi if [ -z "$BRANCH_NAME" ]; then echo "please input a git branch name" exit; fi if [ -z "$PROFILE" ]; then echo "please choose a profile" exit; fi echo "=====================begin deploy=====================" buildProject; stopTomcat; releaseWar; echo "=====================deploy succ=====================" tail -f /data/tomcat/logs/catalina.out}main;
阅读全文
0 0
- 自动发布脚本导致的Tomcat意外退出
- shell脚本启动,tomcat意外退出的问题
- 关于java-web项目发布时,tomcat意外退出的总结
- Tomcat进程意外退出的问题分析
- tomcat进程意外退出的问题分析
- tomcat进程意外退出的问题分析
- tomcat进程意外退出的问题分析
- tomcat进程意外退出的问题分析
- Tomcat进程意外退出的问题分析
- Tomcat进程意外退出的问题分析
- tomcat进程意外退出的问题分析
- Tomcat进程意外退出的问题分析
- tomcat进程意外退出的问题分析
- tomcat 进程意外退出
- tomcat 脚本自动发布应用
- .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
- android.webkit.WebView 使用 SINGLE_COLUMN layout algorithm 导致程序意外退出的解决办法
- TOMCAT定期自动正常退出的解决办法
- MongoDB 创建索引导致锁库的解决方案
- <select>里动态添加option
- TFS 2010 使用手册(二)项目集合与项目
- ExpressRoute 线路和路由域
- 清华梦的粉碎—写给清华大学的退学申请
- 自动发布脚本导致的Tomcat意外退出
- MATLAB的fminunc函数使用参数解释
- opencv安装
- 批量下载文件,打包成zip压缩包
- Java中final、finally、finalize的区别
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- Hystrix系列之工作流程
- 海外SDK之----------ios集成谷歌登录 GIDSignIn
- TFS 2010 使用手册(三)权限管理