zoukankan      html  css  js  c++  java
  • 解决linux下tomcat停止进程任存在问题

    解决linux下tomcat停止进程任存在问题

    在Linux下(之所以强调linux下,是因为在windows下正常),执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访问,但是ps -ef |grep tomcat 后,发现tomcat对应的java进程未随web容器关闭而销毁,进而存在僵尸java进程。多次shutdown以后会发现系统内存溢出,然后需要一个一个把tomcat的进程杀掉

    问题原因

    在Linux系统中当有非守护线程(即User Thread)存在,jvm不会退出(当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出)。

    在本人项目中是因为使用了ScheduledExecutorService建立了一个定时任务,(executorService会为之维护一个定时服务的线程池,在web容器中建立的线程的生命周期并不会和Web应用程序保持同步,该线程池并不会随着web容器关闭而销毁),因此在tomcat停止的时候没有将这个定时任务线程不会停止。

    问题解决

    ScheduledExecutorService有一个shutdownNow()方法,只需要在系统停止时调用这个方法将定时任务停掉即可。

    另外

    Spring为JDK Timer和Quartz Scheduler所提供的TimerFactoryBean和SchedulerFactoryBean能够和Spring容器的生命周期关联,在 Spring容器启动时启动调度器,而在Spring容器关闭时,停止调度器。所以在Spring中通过这两个FactoryBean配置调度器,再从 Spring IoC中获取调度器引用进行任务调度将不会出现这种Web容器关闭而任务依然运行的问题。

  • 相关阅读:
    poj2926
    poj2917
    新手入门:PHP网站开发中常见问题汇总
    js字符串转换成数字,数字转换成字符串
    !! jquery主要资料
    IT公司面试手册.htmhttp://www.mianwww.com/html/2009/02/2931.html
    sql语句 返回最后的insert操作所产生的自动增长的id
    eclipse 无法正常保存js
    javascript深入理解js闭包
    如何用javascript操作本地文件(读写txt文件)
  • 原文地址:https://www.cnblogs.com/wwyz/p/6641724.html
Copyright © 2011-2022 走看看