Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1433|回复: 3

监控并自动重启tomcat的脚本

[复制链接]

18

主题

107

帖子

1465

积分

金牌会员

Rank: 6Rank: 6

积分
1465
发表于 2015-3-26 17:14:56 | 显示全部楼层 |阅读模式
本帖最后由 韩艳威 于 2015-3-26 17:17 编辑

公司的tomcat存在内存泄露的问题,偏偏程序员们也没时间去debug,当时我正好在研究shell脚本,就用shell写了如下内容:
首先,我不太懂tomcat,所以请java程序员写了一个web页面监控tomcat的状态,当tomcat空闲内存太少的时候,web页面的“LessOfMemory”字段就会消失,然后根据这个来判断是否应该重启tomcat。
正文如下:
#!/bin/bash
#Program
#       yong lai  jian shi  tomcat shi fou  si  diao .ru guo si le  jiu chong qi  ta  .
#History
#2009/1/5       Caoyameng       Version 1.0
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/tomcat/bin
export PATH
#PATH里加入了tomcat的路径
test -e "status.jsp"  && rm -f  status.jsp;
#检测当前目录下是否有监控用的web文件存在,存在则删除。
wget  -b "http://127.0.0.1/main/status.jsp"
#下载这个页面,加-b的参数是为了让wget后台下载。
#之所以设置后台下载,是考虑到一种及其罕见的情况,如果cpu占用量100%或者端口阻塞,10分钟乃至1个小时都下载不下来这个页面,那整个监控脚本岂不是要卡在这里不动了?
sleep 3
#延时三秒,给wget下载页面的时间

tom=`cat status.jsp |grep LessOfMemory`
#设置一个变量为tom。
if  
          [ "$tom" == ""  ] ;then

sh /opt/tomcat/bin/shutdown.sh
#如果tom变量为空,则执行tomcatshutdown程序
date >>time.txt
#将shutdown的时间计入日志。
elif
                [ "$tom" != "" ] ;then
                exit 0
#如果tom不为空,则说明该web页面含有LessOfMemory字段,tomcat工作正常,退出shell脚本。
fi

sleep 3
#延时三秒,给tomcat自己结束自己的时间

tompid=`ps x | grep tomcat | grep -v grep|awk '{print $1}'`

#看一下tomcat进程是否还存在?如果存在,则将其PID号赋值给tompid变量

[ -z "$tompid" ] && kill -9  $tompid ;
#如果tompid不为空,则执行kill -9命令强行结束tomcat
Date >> time2.txt
#将系统时间写入第二个日志文件
sh  /opt/tomcat/bin/startup.sh
#重启tomcat。

本人对shell脚本的理解是:
shell脚本做的更多是判断性质的工作,具体的工作都是交给外围程序去做的。
比如说shell脚本只判断变量是否存在,其他的工作,如wget、kill、grep等等都是外围程序。
只熟悉shell脚本自身的判断规则是不够的。比如说之前我就不知道wget该怎么进入后台下载,也不知道如何用grep命令拾取ps命令里的PID.
如果我对tomcat非常熟悉,就不用麻烦java工程师帮我写那个监控页面了。
附录:jsp源码
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="java.util.*" %>
<%
out.println("<br>");
out.println("<center><h1>");
out.println("Your Jsp Server works!<br><br>");
out.println("</h1></center>");
  long totalMemory=java.lang.Runtime.getRuntime().totalMemory();
  long freeMemory=java.lang.Runtime.getRuntime().freeMemory();
  long usedMemory=totalMemory-freeMemory;
  out.println("<br><br>Total Memory is: " +totalMemory/1024/1024+"M");
  out.println("<br>Used  Memory is: " +usedMemory/1024/1024+"M");
  out.println("<br>Free  Memory is: " +freeMemory/1024/1024+"M");
  if( (usedMemory/1024/1024) < 500 ) out.println("<br><br>LessOfMemory!");
  if( (usedMemory/1024/1024) > 500 ) out.println("<br><br>OutOfMemory!");

out.println(new java.util.Date());

out.println(TimeZone.getDefault().getDisplayName());   
%>
京峰教育-------只为有梦想的人
回复

使用道具 举报

18

主题

107

帖子

1465

积分

金牌会员

Rank: 6Rank: 6

积分
1465
 楼主| 发表于 2015-3-26 17:17:14 | 显示全部楼层
Tomcat内存泄露确实很严重,我们的tomcat也经常因泄露宕机,但首要找到coder一块分析下问题原因,自动处理只是下策。
发一下我们的tomcat自动检测脚本:
#!/bin/bash

tlog=/var/log/tomcat_web/tomcatrun-log
thome=/usr/local/tomcat
ip="127.0.0.1"
tport=7080

result=`/usr/bin/wget -S --spider --tries=3 --timeout=3 http://$ip{tport}/index.jsp 2>&1 | grep HTTP/1.1|awk '{print $2}'`
        if [ "T$result" = "T200" ];then
                echo "Tomcat  Running OK">>$tlog
        else
                sleep 5
                result=`/usr/bin/wget -S --spider --tries=5 --timeout=3 http://$ip{tport}/index.jsp 2>&1 | grep HTTP/1.1|awk '{print $2}'`
                if [ "T$result" = "T200" ];then
                echo "tomcat Running OK">>$tlog
                else
                        echo "tomcat is not Working : `date +%Y/%m/%d-%H:%M:%S`">>$tlog
                        tomcatpid=`ps -ef |grep tomcat | grep jdk | grep -v "grep"|awk '{print $2}'`
                        if [ ! -z "$tomcatpid" ];then
                                kill -9 $tomcatpid
                                sleep 3
                                $thome/bin/startup.sh
                        else
                                $thome/bin/startup.sh
                        fi
                fi
        fi
京峰教育-------只为有梦想的人
回复 支持 反对

使用道具 举报

18

主题

107

帖子

1465

积分

金牌会员

Rank: 6Rank: 6

积分
1465
 楼主| 发表于 2015-4-2 16:11:15 | 显示全部楼层
哈哈。这个吗,这个后期老师都会讲解的。
京峰教育-------只为有梦想的人
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-8-18 21:45 , Processed in 0.050824 second(s), 11 queries , Apc On.

快速回复 返回顶部 返回列表