zoukankan      html  css  js  c++  java
  • linux环境中关闭tomcat,通过shutdown.sh无法彻底关闭--线程池

      最近测试环境上测试的项目通过shutdown.sh始终无法彻底关闭。

      之前临时解决方法两种:

      第一:通过ps -ef|grep tomcat查看到tomcat的进程直接使用kill来杀死进程。

          第二: 基本原理为启动tomcat时记录启动tomcat的进程id(pid),关闭时强制杀死该进程

                   1.找到tomcat下bin/catalina.sh文件,vi进去添加点东西,主要是记录tomcat的pid,如下:

      

    大概在第125行左右,添加如下代码

    #设置CATALINA_PID(后加)
    if [ -z "$CATALINA_PID" ]; then
          CATALINA_PID=$PRGDIR/CATALINA_PID
          cat $CATALINA_PID
    fi

    保存即可。

    2.vi进shutdown.sh文件,在最后一行如下红圈-force:

    保存即可.

      但是始终未解决根本问题。查找问题思路:通过java自带的工具jps或者linux自带命令查找线程。这里直接使用jps。找到线程

           再执行jstack pid,出现错误类似这样

    方法一:从tomcat下项目入手,一般造成这种原因是因为项目中有非守护线程的存在。那么怎么找到改线程呢,请看下面:

    利用jdk 提供的jstack可以帮助我们找到:
    $JAVA_HOME/bin/jstack  <pid>
    pid是指进程ID, 用ps -ef|grep tomcat 就可以查看到:

    12126即为pid,继续输入jstack 12126会看到如下一堆东西:

    还有一堆的线程池错误信息,上面截图是抄网上其他朋友们的,但是这堆信息和我差不多,。线程无法停止。再综合考虑code,发现code再关闭tomcat里没有调用关闭线程池的方法。这里需要手动关闭下,贴上代码

     

    如果使用spring的线程池,最好也要加上destroy-method哦。

     

    最后彻底解决。希望对朋友有所帮助

  • 相关阅读:
    sql server 查询数据判断为空
    sql 排序
    ASP.NE 上传文件控件
    JQ 获取下一个元素和获取下一个元素的[指定]子元素
    sql server 查询时间 格式化输出
    ASP.NET 页面验证cookie
    ASP.NET MD5加密
    HTML编辑器ASP.NET
    Repeater控件
    20150215-情愿
  • 原文地址:https://www.cnblogs.com/lanweijava/p/9125134.html
Copyright © 2011-2022 走看看