`
dchaoxiong
  • 浏览: 180498 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于tomcat无法 shutdown的问题

阅读更多

 

关于tomcat无法shutdown的问题:
 
    这个主要是由于tomcat应用服务中有非daemon线程没有关闭。而根据jvm退出规则,只要有非daemon线程存在,jvm就不会退出
 
    在我们的PerLogTask 使用Timer.schedule 周期性执行任务,里面派了出了线程,这些线程属于PerLogTask的“资源”,也只能由PerLogTask去释放 。而tomcat在shutdown时,它会回收了PerLogTask本身“资源”,却不会去回收PerLogTask申请的“资源”,造成有“资源”没有释放,jvm就不会退出。所以在tomcat回收PerLogTask“资源”时,也应该通知PerLogTask回收它自己申请的“资源”。
 
   
    解决方法:
        1、注释掉 perfLogTimer。不用这个组件,同时检查是否还有这种定时程序里分配了线程。
        2、把perfLogTimer移动到biz-context-core.xml里,由spring管理。(core-context.xml这个文件不是由spring管理的
          
         增加一个属性"destroy-method"
        <bean id="perfLogTimer" class="com.paipai.logicframework.common.perstat.PerLogTask"  init-method="init" destroy-method="clear" >
         
        因此要升级类com.paipai.logicframework.common.perstat.PerLogTask,增加了clear方法。
 
        对于用com.paipai.logicframework-3.0.1.jar的,可以从持续集成获取,已经升级。对于3.0.1版本之前的。替换掉com.paipai.logicframework.common.perstat.PerLogTask类 。见附近里。
 
 
   
 
同时说明一下:tomcat里应用服务里有线程相关的,一定要释放这些线程,按“谁申请谁释放”原则处理。






拍拍API 项目运行在Tomcat 等容器中时, 容器未能正常关闭,

比如在Tomcat 启动后, 未能通过使用shutdwon.sh 命令关闭Tomcat,

造成这个问题的主要原因是: 容器在软关闭时, 检查到容器中还有其他由容器创建的服务尚在运行,

此时容器只有等待所有的服务都结束后, 才会去真正关闭容器.

而我们的API 项目中, 有个Springbean 服务(com.paipai.logicframework.common.perstat.PerLogTask) 在容器启动时创建了定时器,

该定时器需要由Spring 容器去维护其生命周期( 启动/ 运行/ 结束),

而在我们的Spring 配置文件中只定义了该服务Bena 的启动方法, 没有去配置其结束的方法,

这就导致在Tomcat 软关闭时, 没有结束该定时器的任务, 因此Tomcat 一直处于等待关闭的状态.

 

Spring 的配置文件如下:

    core-context.xml

    <!--=====================================================================-->
    <!--
定义性能统计日志记录器-->
    <!--=====================================================================-->
    <bean id="perfLogTimer" class="com.paipai.logicframework.common.perstat.PerLogTask" init-method="init"
destroy-method="clear" >
        <description>
性能统计日志的定时记录器</description>
        <property name="delayTime">
            <description>
任务初始化延迟的时间,以秒为单位</description>
             <value>60</value>
         </property>

    </bena>

 

 

tip:

在服务容器中, 对于具有生命周期的服务( 比如定时器/ 具有阻塞方法的服务/ 异步通讯的服务),

容器都应该主动去管理好这些服务的生命周期, 便于整个容器的启动/ 关闭和运行维护.

分享到:
评论

相关推荐

    tomcat进程不能完全关闭的处理办法.txt

    tomcat shutdown后,进程还存在linux系统中的解决办法

    解决Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题

    主要介绍了解决Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题 ,解决方法很简单,具体内容详情大家跟随小编一起通过本文学习吧

    shutdown.bat

    一键关机代码 可以放在任务计划里面自动定时关机

    Tomcat-7.0.30

    shutdown.bat Tomcat配置: 修改server.xml: connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/&gt; 修改目的:为了解决使用HTTP Get方法传递中文参数乱码的问题 修改context.xml: 把修改成...

    Linux操作系统下两种自动启动Tomcat的方法

    Tomcat安装目录下的bin目录有两个脚本分别用来启动和停止Tomcat,分别是startup.sh, shutdown.sh,你可以用这两个脚本来手工启动和停止Tomcat服务并进行安装后的测试。我们最简单的方法就是通过startup.sh来自动启动...

    Apache-tomcat-6.0.53 for Linux(Redhat/CentOS测试通过)

    ./catalina.sh start (关闭tomcat ./shutdown.sh stop) 4.、测试 查看Tomcat是否已经启动netstat -ntl |grep 8080 浏览器地址栏输入 http://localhost:8080/ 如果能看到Tomcat的欢迎页表示整合成功,至此已经完成...

    Jspxcms 安装包 v9.5.1 tomcat版

    (运行tomcat\bin\shutdown.bat关闭tomcat,之后再运行tomcat\bin\startup.bat启动tomat) jspxcms v9.5.1 更新日志:1、文件管理save权限将save@web_file_xweb_file_x:save。2、修复文档管理中正文编辑器保存视频...

    tomcat-7.0.28

    安装tomcat7 下载地址:http://tomcat.apache.com/ cd /usr/local/src/tarbag tar zxvf apache-tomcat-7.0.28.tar.gz -C ../software/ cd ../software .../usr/local/apache-tomcat-7.0.28/bin/shutdown.sh

    Nginx+Tomcat负载均衡

    首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把自己成功的方法拿出来与大家分享。 ...

    APACHE 2.2.9+TOMCAT6.0.18配置负载均衡

    APACHE 2.2.9+TOMCAT6.0.18配置负载均衡 目标: 使用 apache 和 tomcat 配置一个可以应用的 web 网站,要达到以下要求: 1、 Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例,并进行负载均衡。 2、 为系统...

    同一台服务器(电脑)运行多个Tomcat的设置方法步骤

    大多人在Windows平台用的Tomcat都是免安装版本的,很自然想到复制几份目录,就是在同一个电脑上...2、更改Tomcat的 catalina.bat、startup.bat、shutdown.bat 把如上提到的三个文件里的CATALINA_HOME常量改为CATALINA_H

    apache-tomcat-8.0.46

    windows 免安装,apache-tomcat-8.0.46目录下lib的startup.bat和shutdown.bat文件开头加入:SET JAVA_HOME=D:\Java\jdk1.7.0_72 SET CATALINA_HOME=D:\Java\apache-tomcat-8.0.46,即可使用

    tomcat6-集成admin

    tomcat6 admin 管理页面 ...1.bin目录下的startup.bat和shutdown.bat添加:"set java_home=C:\jdk6.0"(注:C:\jdk6.0为本机的jdk安装路径). 2.lib目录下添加:commons-logging.jar和commons-modeler-2.0.1.jar,下载地址: ...

    tomcat8用redis实现session共享.rar

    ... 3、将redisson-all-3.11.2.jar和redisson-tomcat-8-3.11.2.jar 拷贝到${catalina.base}\lib下 4、在原有tomcat\context.xml下 添加 以下代码(参考 ... closeMethod="shutdown"/&gt; &lt;/GlobalNamingResources&gt;

    apache-tomcat-9.0.31-windows-x64.zip

    Tomcat的目录结构: bin: startup.bat shutdown.bat startup.sh shutdown.sh conf: tomcat运行时所需要的配置文件。 注意: server.xml (配置tomcat端口) connectionTimeout="20000" ...

    解决centos7中tomcat启动与本机访问问题

    tomcat启动后本机进行访问无法打开,是由于centos的防火墙的问题,  关闭centos7的防火墙 systemctl stop firewalld systemctl disable firewalld   查看防火墙是否关闭 firewall -cmd –state 总结 以上所述...

    mysql-java8-tomcat8

    一\安装jdk 1\下载linux对应版本的jdk安装包 jdk-8u131-linux-x64.tar.gz 2\把安装包上传到linux服务器上 \root 3\首先确认一下你的linux服务器上面是否有安装过jdk ... ./shutdown.sh (4)启动 ./startup.sh

    nginx + tomcat 集群配置

    &lt;Server port="18006" shutdown="SHUTDOWN"&gt; 第二处端口修改: &lt;!-- port="18081" tomcat监听端口,随意设置,别太小 --&gt; connectionTimeout="20000" redirectPort="8443" /&gt; 第三处端口...

    Tomcat目录结构详细介绍

    打开tomcat的解压之后的目录可以...shutdown 用来关闭tomcat 修改catalina可以设置tomcat的内存 2.Tomcat的conf目录: conf目录主要是用来存放tomcat的一些配置文件。 server.xml可以设置端口号、设置域名或IP、

    apache+tomcat 实现负载均衡

    概念: AJP是Apache提供的完成与其它服务器通讯的一种协议。... 备注与worker.list = controller,tomcat1,tomcat2的tomcat1或tocmat2对应 &lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"&gt;

Global site tag (gtag.js) - Google Analytics