自动发布脚本导致的Tomcat意外退出
2017-11-10 14:56
435 查看
最近公司项目的Dev环境要自己维护,为了避免麻烦,写了一个发布脚本,但是发现每次关闭和服务器的SSH连接后,Tomcat就意外退出,查看日志发现最后退出有如下几行日志:
最开始怀疑是 OOM 问题,排查代码没有发现相关问题,JVM配置OOM后转存堆内存快照,也没有发现问题,后来发现规律是每次关闭SSH连接一会儿后Tomcat即关闭,度娘后发现如下文章:
tomcat进程意外退出的问题分析
Java进程挂在了脚本进程下面;
Nov 10, 2017 2:38:35 PM org.apache.coyote.AbstractProtocol pause INFO: Pausing ProtocolHandler ["http-nio-8080"] Nov 10, 2017 2:38:35 PM org.apache.catalina.core.StandardService stopInternal INFO: 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 clearReferencesThreads SEVERE: 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 stop INFO: Stopping ProtocolHandler ["http-nio-8080"] Nov 10, 2017 2:38:35 PM org.apache.coyote.AbstractProtocol destroy INFO: 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=$1 BRANCH_NAME=$2 PROFILE=$3 BASE_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;
相关文章推荐
- tomcat项目自动发布脚本.主脚本
- tomcat项目自动发布脚本.项目配置脚本
- linux 配置 tomcat 自动发布脚本
- tomcat项目自动发布脚本.脚本运行效果
- linux使用shell脚本管理其他服务器Tomcat启动停止、自动发布
- Linux系统下tomcat自动拉取代码打包发布的配置部署和脚本编写(转朋友)
- tomcat自动发布脚本
- shell脚本 tomcat自动备份发布war包
- [置顶] linux系统tomcat应为被定时任务脚本监控自动部署,服务器重启导致同一个tomcat出现很多进程,kill -9杀死又出现等一系列问题解决。
- linux shell脚本自动从git上拉取maven代码编译打war包并发布到tomcat
- tomcat 脚本自动发布应用
- shell脚本启动,tomcat意外退出的问题
- 关于java-web项目发布时,tomcat意外退出的总结
- 写了一个自动打包并发布到tomcat的脚本
- svn-maven-tomcat自动发布脚本
- eclipse自动编译后,内存不足导致退出
- java项目配置jenkins自动发布到tomcat
- 【转】通过Python脚本自动发布ArcGIS服务
- 关于 Tomcat进程意外退出的问题解析
- 关于jsp项目带有外带的javascript发布到tomcat后缓存导致javascript辨别不灵敏的问题