tomcat默认reload引起宕机

本文探讨了Tomcat部署时可能导致宕机的问题,具体为类加载器创建与内存泄露之间的相互作用。通过分析日志信息,解释了在重新部署应用时如何引发内存泄露,并提供了两种解决方案:修改server.xml文件禁用自动reload,或将变更文件移至项目代码外。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目使用文件来保存修改,为了方便直接把文件放在src目录下;部署后发现过了一阵tomcat就会宕机;
日志为:

Oct 18, 2013 5:20:11 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
Oct 18, 2013 5:20:11 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: The web application [/a7list] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@13c4a657]) and a value of type [com.caucho.services.server.ServiceContext] (value [com.caucho.services.server.ServiceContext@5384a3e4]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
...-----
       tomcat 6.025之后引入了一种内存泄露的检查机制,会把不能垃圾收集的对像做日志。
     当您重新部署您的应用程序时,Tomcat 将创建新的类加载器。旧类加载器必须是垃圾回收,否则你会 permgen 内存泄漏。


分析原因是由于运行项目的classes目录文件变更引起tomcat reload,同时reload时没有释放资源引起的宕机。
修改方式:
1、部署时修改tomcat 的server.xml文件,让项目变更时不reload。
      修改文件:conf\server.xml
      修改位置:
<Host name="localhost" debug="0" appBase="webapps"  unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false">
     <Context path="/myapp"  docBase=" "  debug="0" reloadable="false"/>

2、将变更文件放到项目代码外面。

采用的方式是两种都使用了~

转载于:https://my.oschina.net/aomo/blog/169880

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值