`
dchaoxiong
  • 浏览: 183399 次
  • 性别: 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关掉的问题

    在使用Apache Tomcat服务器时,有时可能会遇到一个棘手的问题:当你尝试通过`shutdown.bat`脚本关闭一个Tomcat实例时,它意外地关闭了同一台机器上的其他Tomcat实例。这个问题主要是由于Tomcat的批处理脚本如何查找...

    tomcat问题解决

    5. **权限问题**:如果Tomcat无法写入工作目录或日志目录,可能是因为文件权限不足。确保Tomcat运行用户对相关目录有读写权限。 6. **应用错误**:如果问题出在部署的应用上,比如Web应用的类加载问题或者Servlet...

    tomcat自动定时重启

    本篇文章将深入探讨如何实现"Tomcat自动定时重启"这一功能,以及提供的两个批处理文件——`Tomcat_startup.bat`和`Tomcat_shutdown.bat`的作用。 首先,`Tomcat_startup.bat`和`Tomcat_shutdown.bat`是Tomcat服务器...

    Tomcat常见问题集锦(持续更新)

    - 停止Tomcat则使用`bin/shutdown.sh`或`shutdown.bat`。 3. **配置文件详解**: - `server.xml`:这是Tomcat的主要配置文件,包含了服务器端口、Context、Connector等设置。 - `web.xml`:每个Web应用都有一个...

    tomcat5/tomcat5.5安装包

    1. `bin`:包含启动、停止和管理Tomcat的脚本,如`startup.sh`和`shutdown.sh`(Unix/Linux)或`startup.bat`和`shutdown.bat`(Windows)。 2. `conf`:存放服务器配置文件,如`server.xml`(定义服务器配置)、`...

    tomcat显示出现中文乱码问题.docx

    重启命令通常在Tomcat的bin目录下执行`shutdown.sh`(Linux/Mac)或`shutdown.bat`(Windows)停止服务,然后执行`startup.sh`或`startup.bat`启动服务。 然而,仅仅修改控制台的编码可能还不够,因为Web应用的其他...

    apache-tomcat-7.0.39

    - `bin`:包含Tomcat的可执行文件和脚本,如startup.sh/startup.bat用于启动Tomcat,shutdown.sh/shutdown.bat用于关闭Tomcat。 - `conf`:存放所有配置文件,如server.xml、web.xml、context.xml等。 - `lib`:存储...

    Linux下Tomcat重新启动

    在 Linux 系统下,Tomcat 的重新启动是一个常见的问题,很多开发者和运维人员都会遇到这种情况。那么,如何在 Linux 系统下重新启动 Tomcat 呢?下面,我们将详细讲解 Tomcat 的重新启动过程。 首先,我们需要了解 ...

    apache-tomcat-8.5.23.tar.gz 【Tomcat服务器,Tomcat8.5 linux版】

    1. **bin目录**:包含了启动和停止Tomcat的脚本,如`startup.sh`和`shutdown.sh`,以及用于管理应用的工具,如`catalina.sh`和`manager.sh`。 2. **conf目录**:包含Tomcat的主要配置文件,如`server.xml`(定义...

    tomcat6.0.35_tomcat_

    2. **启动与停止**:通过`bin/startup.sh`(Linux/Unix)或`bin/startup.bat`(Windows)脚本启动Tomcat,使用`bin/shutdown.sh`或`bin/shutdown.bat`关闭服务。 3. **配置文件**:主要的配置文件包括`conf/server....

    tomcat-7.0.108.zip

    描述中提到的"tomcat部署web项目"是关于如何在Tomcat服务器上发布和运行web应用的过程。这通常涉及以下几个步骤: 1. **安装Tomcat**:解压下载的"tomcat-7.0.108.zip"到指定目录,确保服务器有足够的权限运行其可...

    tomcat7 tomcat9 两个资源

    3. **启动和停止**:使用bin目录下的startup.bat/sh脚本启动Tomcat,使用shutdown.bat/sh脚本停止Tomcat。也可以通过管理工具如catalina.sh或catalina.bat进行更复杂的管理操作。 4. **Web应用程序部署**:将Web...

    tomcat8.5.59

    3. 启动与停止:使用`bin/startup.sh`(Unix/Linux)或`bin/startup.bat`(Windows)启动Tomcat,`bin/shutdown.sh`或`bin/shutdown.bat`则用于关闭服务器。 4. 配置与管理:通过修改`conf/server.xml`配置文件,...

    tomcat8 apache-tomcat-8.0.26.tar.gz

    8. **管理服务**:可以通过`shutdown.sh` 停止Tomcat,或者你可以配置Tomcat作为系统服务,使其在系统启动时自动启动。 9. **安全与优化**:为了提高安全性,应配置Tomcat的`server.xml`文件,例如限制连接器的端口...

    tomcat8安装包下载

    - 运行shutdown.bat(Windows)或shutdown.sh(Linux/Mac)来关闭Tomcat。 7. **验证安装**:启动成功后,可以通过浏览器访问`http://localhost:8080`,如果能看到Tomcat的欢迎页面,说明Tomcat已经正确安装并运行...

    tomcat安全加固手册

    这些示例程序不仅可能包含安全隐患,还可能泄露关于服务器的信息,因此建议彻底清除。 **4. 禁止登录** 禁用默认的管理员账户可以进一步提高安全性。可以通过注释掉`/conf/tomcat-users.xml`文件中的用户信息实现...

    tomcat6.0及tomcat的Eclipse插件

    通过bin目录下的startup.bat或startup.sh脚本可以启动Tomcat服务,shutdown.bat或shutdown.sh用于关闭服务。 3. **应用程序部署**:Tomcat支持WAR格式的Web应用部署,只需将WAR文件放入webapps目录下,Tomcat会自动...

    Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例)

    ExecStop=/usr/local/tomcat/apache-tomcat-8.5.47/bin/shutdown.sh User=root Restart=always [Install] WantedBy=multi-user.target ``` 3. **保存并关闭文件**,然后更新systemd的缓存,并启用Tomcat服务...

Global site tag (gtag.js) - Google Analytics