linux 下定时重启 tomcat

类别:linux  阅读:151  发布时间:Sun Jan 14 22:07:06 CST 2018

    最近做项目,发现有个提供代理下载图片服务的 tomcat 经常挂掉,但重启后又可以恢复正常,用 jvisualVM 分析堆内存,发现没什么异常,排除了 OOM 的可能性,输出的 hs_err_pid 文件如下:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGBUS (0x7) at pc=0x00007f8e3d052470, pid=12365, tid=0x00007f8e34585700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# v  ~StubRoutines::jlong_disjoint_arraycopy
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

    经 google 搜索,兼结合代码分析,发现可能是 java 内存映射文件时写入失败导致的,一时找不到完美的解决方案,决定采用定时任务定时检测 tomcat 进程,挂掉就重新启动,于是编写一段自动重启 tomcat 的 shell 脚本,如下:

_DOWNLOADER1_PID=$( ps -ef | grep tomcat/downloader.oneway.mobi/ | grep -v grep | awk '{print $2}' )
if [ ! $_DOWNLOADER1_PID ]
then
  /service/tomcat/downloader/bin/startup.sh
else
  echo $_DOWNLOADER1_PID
fi

    然后配置 cron 表达式,vim /etc/crontab

*/10 * * * *  root /oneway/bin/restart_downloader.sh

    每隔十分钟执行一次 restart_downloader.sh 脚本,达到重启的目的。

关键字:cron tomcat

© copyright 粤ICP备16108162号-1