码迷,mamicode.com
首页 > 编程语言 > 详细

linux下tomcat shutdown后 java进程依旧存在

时间:2014-08-01 19:54:52      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   java   os   io   


今天遇到一个很奇怪的问题,如标题所示:


linux下(之所以强调linux下,是因为在windows下正常),执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访问了,但是ps -ef | grep java 后,发现tomcat对应的java进程未随web容器关闭而销毁,进而存在僵尸java进程。


刚开始百思不得其解,google下,发现存在一种说法是:有非守护线程存在,jvm不会退出。进而确认是因为项目代码存在

scheduledExecutorService.scheduleAtFixedRate,众所周知,executorService会为之维护一个定时服务的线程池,该线程池并不会随着web容器关闭而销毁,不过有点让我很费解,尽管我已经在代码中addShutdownHook(shutdown()) ,但实际证明,这个hook只对Application.main时有效,在web容器中,hook会失效,所以并不会因为web容器关闭触发hook,进而能shutdown scheduledExecutorService。


知道原因后,处理其实很简单,在ContextLoaderListener#contextDestroyed 容器关闭时主动销毁scheduledExecutorService:


    public void contextDestroyed(ServletContextEvent event)
    {
        //close ScheduledExecutorService in web container
        AccessTokenScheduled.shutdownScheduledExecutor();
        SystemTimer.shutdownScheduledExecutor();
        super.contextDestroyed(event);
        log.info("AppListener # context destroyed... ");
    }


参考:http://blog.sina.com.cn/s/blog_613904cc0101i5em.html

           http://m.blog.csdn.net/blog/lin910429/25716113



linux下tomcat shutdown后 java进程依旧存在,布布扣,bubuko.com

linux下tomcat shutdown后 java进程依旧存在

标签:des   style   blog   http   color   java   os   io   

原文地址:http://blog.csdn.net/will_awoke/article/details/38338519

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!