精华内容
下载资源
问答
  • tomcat宕机重启脚本

    2015-03-14 11:58:34
    tomcat宕机重启脚本,比较简单的一种设置
  • tomcat宕机自启动

    2019-04-08 09:07:12
    tomcat宕机自启动 标签(空格分隔): tomcat 文章目录tomcat宕机自启动 在tomcat目录下新建shell脚本 #!/bin/sh # 获取tomcat进程ID /opt/apache-tomcat-7.0.79 TomcatID=`ps aux|grep java|grep -v grep|grep ...

    tomcat宕机自启动

    标签(空格分隔): tomcat



    在tomcat目录下新建shell脚本

    #!/bin/sh
    # 获取tomcat进程ID  /opt/apache-tomcat-7.0.79
    TomcatID=`ps aux|grep java|grep -v grep|grep tomcat|awk '{print $2}'`
    
    # tomcat启动程序(这里注意tomcat实际安装的路径)  
    StartTomcat=/opt/apache-tomcat-7.0.79/bin/startup.sh
    
    # 定义要监控的页面地址  
    WebUrl=http://www.khzz.org
    
    # 日志输出 
    TomcatMonitorLog=/opt/apache-tomcat-7.0.79/TomcatMonitor.log 
    
    Monitor() 
    {  
      echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"  
      if [[ $TomcatID ]];then # 这里判断TOMCAT进程是否存在  
        echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."  
        # 检测是否启动成功(成功的话页面会返回状态"200")  
        TomcatServiceCode=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $WebUrl)  
        if [ $TomcatServiceCode -eq 200 ];then  
            echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......"  
        else  
            echo "[error]tomcat页面出错,请注意......状态码为$TomcatServiceCode"  
            echo "[error]页面访问出错,开始重启tomcat"  
            kill -9 $TomcatID  # 杀掉原tomcat进程  
            sleep 3  
            # rm -rf $TomcatCache # 清理tomcat缓存  
            $StartTomcat  
        fi  
      else  
        echo "[error]tomcat进程不存在!tomcat开始自动重启..."  
        echo "[info]$StartTomcat,请稍候......"  
        #rm -rf $TomcatCache  
        $StartTomcat  
      fi  
      echo "------------------------------"  
    }  
    Monitor>>$TomcatMonitorLog
    

    在bin目录下的catalina.sh下配置环境变量和编码格式

    export  JAVA_HOME=/usr/java/jdk1.7.0_79
    export  JRE_HOME=/usr/java/jdk1.7.0_79/jre
    CATALINA_OPTS=-Dfile.encoding=UTF8
    

    在linux的定时任务中添加

    crontab -e
    */3 * * * * /opt/tomcat/bin/check.sh
    
    展开全文
  • tomcat宕机解决方法

    千次阅读 2017-07-12 14:05:46
    最近项目出现tomcat宕机的情况,即项目运行一段时间后tomcat就会停止运行,解决方法步骤如下: 首先进入linux服务器,使用命令top进行查看,发现tomcat的cpu利用率很高,超过100% 接着,使用命令ps -ef|grep tomcat,...

    最近项目出现tomcat宕机的情况,即项目运行一段时间后tomcat就会停止运行,解决方法步骤如下:

    首先进入linux服务器,使用命令top进行查看,发现tomcat的cpu利用率很高,超过100%

    接着,使用命令ps -ef|grep tomcat,查找到对应的pid

    接着使用jmap -heap pid.发现PermGen 的利用率达到了99.99%,所以初步确定了问题是出在永久带内存空间太小。

    解决方法,在tomcat的启动文件(catalina.sh)中添加如下参数,加大永久带的内存

    -XX:PermSize=256M  -XX:MaxPermSize=512M


    这样情况得到了缓解,但运行一段时间以后,又出现了宕机问题,检查后发现又是永久带满了,这次使用

    jmap -permstat pid查看,发现有许多delegatingClassLoader没有被回收,这是由于项目使用了很多的反射导致的,而该classloader的作用是提高反射的效率。

    解决方法,干脆不使用该classloader,最终完整的解决方法如下



    展开全文
  • 判断tomcat是否宕机,如果宕机,则进行重启。java实现。Detector.java:import java.net.URL;import java.net.URLConnection;import java.util.Date;/**** @author james**/public class Detector {private static ...

    判断tomcat是否宕机,如果宕机,则进行重启。java实现。

    Detector.java:

    import java.net.URL;

    import java.net.URLConnection;

    import java.util.Date;

    /**

    *

    * @author james

    *

    */

    public class Detector {

    private static void keepTomcatAlive() throws NullPointerException {

    String s;

    String t = new String("tomcat6");

    boolean isTomcatAlive = false;

    java.io.BufferedReader in;

    System.setProperty("sun.net.client.defaultConnectTimeout", "8000");

    System.setProperty("sun.net.client.defaultReadTimeout", "10000");

    try {

    URL url = new URL("http://localhost:8080/test.jsp");

    URLConnection con = url.openConnection();

    in = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));

    con.setConnectTimeout(1000);

    con.setReadTimeout(4000);

    while ((s = in.readLine()) != null) {

    if (s.length() > 0) {

    //accessed page successful.

    return;

    }

    }

    in.close();

    } catch (Exception ex) {

    //ex.printStackTrace();

    }

    try {

    java.lang.Process p = java.lang.Runtime.getRuntime().exec("ps -aux");

    in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));

    while ((s = in.readLine()) != null) {

    if (s.startsWith(t)) {

    isTomcatAlive = true;

    break;

    }

    }

    in.close();

    }catch (Exception e) {

    e.printStackTrace();

    }

    if (isTomcatAlive) {

    System.out.println(" Tomcat is alive but not response!");

    stopTomcat();

    }

    startTomcat();

    }

    public static void stopTomcat() {

    try {

    java.lang.Process p = java.lang.Runtime.getRuntime().exec("/etc/init.d/tomcat6 stop");

    java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));

    String s;

    String t = "Stopping";

    boolean restart = false;

    while ((s = in.readLine()) != null) {

    if (s.indexOf(t) != -1) {

    restart = true;

    break;

    }

    }

    System.out.println(" Tomcat is stop " + (restart ? "OK" : "ERROR"));

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public static void startTomcat() {

    try {

    java.lang.Process p = java.lang.Runtime.getRuntime().exec("/etc/init.d/tomcat6 start");

    java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));

    String s;

    String t = "Starting";

    boolean restart = false;

    while ((s = in.readLine()) != null) {

    if (s.indexOf(t) != -1) {

    restart = true;

    break;

    }

    }

    System.out.println(" Tomcat is start " + (restart ? "OK" : "ERROR"));

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    private static void debug(String msg){

    System.out.println("Debug::: "+msg);

    }

    public static void main(String[] args) {

    while (true) {

    try {

    debug("Detect agin ");

    Detector.keepTomcatAlive();

    debug("Sleep...");

    Thread.sleep(30000);

    } catch (Exception ex) {

    ex.printStackTrace();

    }

    }

    }

    }

    展开全文
  • 之前在网上看过一篇文章,是讲Tomcat进程意外退出的,我看完感觉好奇,自己也测试了下,果然是有这种问题,所以自己也借此总结一下。先简单说下测试过程,先创建一个web服务启动 test.sh,内容如下:#!/bin/bashcd/...

    之前在网上看过一篇文章,是讲Tomcat进程意外退出的,我看完感觉好奇,自己也测试了下,果然是有这种问题,所以自己也借此总结一下。

    先简单说下测试过程,先创建一个web服务启动 test.sh,内容如下:

    #!/bin/bash

    cd/usr/software/tomcat/apache-tomcat-7.0.81/bin/./catalina.sh start

    tail-f /usr/software/tomcat/apache-tomcat-7.0.81/logs/catalina.out

    然后启动该脚本,服务起来了,可以正常访问。

    tomcat启动之后,当前shell进程并没有退出,而是挂住在tail进程,往终端输出日志内容。这种情况下:

    1)、如果我先直接关掉ssh窗口后,Java进程会退出,服务不可用。

    2)、而我如果先 用ctrl-c终止test.sh进程,然后再关闭ssh终端的话,这时Java进程不会退出。服务没有受到影响,仍然可用。

    3)、下面我又把最后tail这一行去掉,发现直接关掉ssh终端窗口,Java进程也不会退出,服务不受影响。

    #!/bin/bash

    cd/usr/software/tomcat/apache-tomcat-7.0.81/bin/./catalina.sh start

    4)、最后我再次恢复tail这一行,然后在开头再加上 set -m, 直接关掉ssh窗口Java进程同样也不会退出,服务同样也不受影响。

    #!/bin/bash

    set-m

    cd/usr/software/tomcat/apache-tomcat-7.0.81/bin/./catalina.sh start

    tail-f /usr/software/tomcat/apache-tomcat-7.0.81/logs/catalina.out

    到这里是不是有点晕了,不急,待我慢慢道出原因来。

    这是一个有趣的现象,catalina.sh start方式启动的tomcat会把java进程挂到init(进程id为1)的父进程下,已经与当前test.sh进程脱离了父子关系,也与ssh进程没有关系,为什么关闭ssh终端窗口会导致java进程退出?

    经过测试,有发现:

    a) 用 ctrl-c 终止当前test.sh进程时,系统events进程向 java 和 tail 两个进程发送了SIGINT 信号

    b) 关闭ssh终端窗口时,sshd向下游进程发送SIGHUP, java进程也会收到。

    后来通过google后了解到: shell在非交互模式下对后台进程处理SIGINT信号时设置的是IGNORE。

    交互模式与非交互模式对作业控制(job control)默认方式不同:

    I)在交互模式下,因为作业控制的需要,shell不会对后台进程处理SIGINT信号设置为忽略。因此这样的话,父进程会把收到的键盘事件比如ctrl-c之类的SIGINT传播给进程组中的每个成员(假设后台进程也是父进程组的成员),那么终端随意ctrl-c就可能导致所有的后台进程退出,显然这样是不合理的。因此,在交互模式下的后台进程会设置一个自己的进程组ID。

    II)而非交互模式下,通常是不需要作业控制的,所以作业控制在非交互模式下默认也是关闭的(当然也可以在脚本里通过选项set -m打开作业控制选项)。不开启作业控制的话,脚本里的后台进程可以通过设置忽略SIGINT信号来避免父进程对组中成员的传播,因为对它来说这个信号已经没有意义。

    在非交互模式下,shell对java进程设置了SIGINT,SIGQUIT信号设置了忽略,但并没有对SIGHUP信号设为忽略,回头看上面说的,直接关闭ssh终端窗口时,sshd向下游进程发送SIGHUP, java进程也会收到。

    再看一下当时的进程层级:

    |-sshd(1622)-+-sshd(11681)---sshd(11699)---bash(11700)---test.sh(13285)---tail(13299)

    sshd把SIGHUP传递给bash进程后,bash会把SIGHUP传递给它的子进程,并且对于其子进程test.sh,bash还会对test.sh的进程组里的成员都传播一遍SIGHUP。因为java后台进程从父进程catalina.sh(又是从其父进程test.sh)继承的pgid,所以java进程仍属于test.sh进程组里的成员,收到SIGHUP后退出。

    如果我们在test.sh里设置开启作业控制的话,就不会让java进程退出了

    #!/bin/bash

    set-m

    cd/usr/software/tomcat/apache-tomcat-7.0.81/bin/./catalina.sh start

    tail-f /usr/software/tomcat/apache-tomcat-7.0.81/logs/catalina.out

    此时java后台进程继承父进程catalina.sh的pgid,而catalina.sh不再使用test.sh的进程组,而是自己的pid作为pgid,catalina.sh进程在执行完退出后,java进程挂到了init下,java与test.sh进程就完全脱离关系了,bash也不会再向它发送信号。

    注: 如果把tail 打印的这一行去掉,为什么Java进程也不会退出,我猜原因应该是,如果没有tail的话, Java进程就不是他们的子进程了,自然怎么操作都不会受影响。

    展开全文
  • import java.net.URL;import java.net.URLConnection;import java.util.Date;public class Detector {private static void keepTomcatAlive() throwsNullPointerException {String...String t = new String("tomcat6...
  • tomcat宕机无法响应问题研究解决

    千次阅读 2018-02-01 16:57:25
    本人于两年前接手,在对该系统进行开发运维过程中,先后解决了两种tomcat宕机无法提供服务情况,具体如下: (1)JVM 内存不足  主Tomcat运行过程出现宕机无法响应的现象,刚开始无法定位问题时只能在挂死出现...
  • 本文实例讲述了java实现监测tomcat是否宕机及控制重启的方法。分享给大家供大家参考。具体如下:detector.java:import java.net.url;import java.net.urlconnection;import java.util.date;/**** @author james**/...
  • tomcat宕机重启

    2014-11-02 12:13:47
    此程序用于运行在服务器中,预留在内存中,监控...(TOMCAT运行状态) 原理即间隔性的访问指定的服务器中运行的网站,如果能够打开就正常,打不开就执行重启命令 使用前,请修改conf.properties文件,其中有各项配置
  • import java.net.URL;import java.net.URLConnection;import java.util.Date;public class Detector {private static void keepTomcatAlive() throwsNullPointerException {String...String t = new String("tomcat6...
  • Linux shell自动监控tomcat宕机重启

    千次阅读 2016-07-26 16:50:48
    参考网上例子 整了个 linux 的自动检测tomcat宕机的shell脚本 以后就可以自己重启了 出了问题。。(有时间放到linux定时任务计划里面)\ 下面检测的是一个工程里面的图片 来检测tomcat 是否正常 echo 001 这种打断...
  • Tomcat宕机检测以及宕机自启方法

    千次阅读 2019-03-19 10:56:33
    【颜色说明:橙色 为 命令 绿色 为 代码 】 一. 首先在本地创建一个monitorTomcat .sh的脚本文件,写下以下脚本 ...TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}') ...
  • nginx 负载均衡时,一台tomcat宕机时的问题 自动切换
  • } public static void stopTomcat() { try { java.lang.Process p = java.lang.Runtime.getRuntime().exec("/etc/init.d/tomcat6 stop"); java.io.BufferedReader in = new java.io.BufferedReader(new java.io....
  • tomcat 宕机原因排查

    2017-11-14 16:59:00
    排查方式:1、运行tomcat并查看tomcat用户是否开启了陌生进程,同时看下tomcat相关目录、系 统/tmp目录有没有陌生文件 2、将该tomcat的访问转向一个不匹配的tomcat,然后通过查看错误日志,看是否有频繁...
  • tomcat宕机自动重启

    千次阅读 2018-02-12 11:06:53
    不多说了 直接上代码 有问题的 欢迎评论交流package com.pzx.tomcat;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net....
  • Linux下自动检测Tomcat是否宕机,并自动重启 公司服务器tomcat经常自动挂掉,具体原因无法找到。所以做了这次调整。让Linux自动检测tomcat是否宕机 1. 新建一个名字为XX.sh的文件,文件内容如下 #!/bin/sh # 获取...
  • 写一个monitor.sh脚本用于判断tomcat进程是否存在,若不存在则启动tomcat 脚本链接https://download.csdn.net/download/qq_41959871/13722321 查看定时任务状态systemctl status crond /sbin/service crond start /...
  • 情况,正常运行的服务器,突然tomcat不能访问了 因为服务器的内存是2g的,所以就怀疑是内存不够了,所导致 开始排查 ps -ef|grep tomcat [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img...
  • #!/bin/bash while true do #执行命令,重启tomcat tomcat_home=/usr/local/tomcat #停止tomcat变量 SHUTDOWN=$tomcat_home/bin/shutdown.sh #启动tomcat变量 STARTTOMCAT=$tomcat_home/bin/startup.sh ...
  • nginx+tocmat 负载均衡时,一台tomcat宕机时的问题在windows下作nginx负载均衡测试。我的nginx的配置文件如下:worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type ...
  • 在服务器上创建一个bush文件,我命名为tomcatMonitor.sh 编辑tomcatMonitor.sh文件,if及fi必须成对出现,如果if then写在一行需要用;隔开 #!/bin/sh # 获取tomcat的PID TOMCAT_PID=$(ps -ef|grep tomcat|grep -w '...
  • 1.在服务器上创建tomcatMonitor.sh 2.使文件生效chmod u+x *.sh 3.编辑tomcatMonitor.sh文件,if及fi必须成对出现,如果if then写在一行需要用;隔开 #!/bin/sh # 获取tomcat的PID TOMCAT_PID=$(ps -ef | grep ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 725
精华内容 290
关键字:

tomcat宕机