修改pro文件,tomcat自动重启怎么办?

前些日子碰到一个很奇怪的问题:

现象是,请求产品中的一个初始化接口,外置tomcat就会自动重启,报以下错误

16-Jul-2021 16:11:01.332 警告 [Catalina-utility-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc
Web应用程序 [ROOT] 注册了JDBC驱动程序 [com.alibaba.druid.proxy.DruidDriver],但在Web应用程序停止时无法注销它。 为防止内
存泄漏,JDBC驱动程序已被强制取消注册。
16-Jul-2021 16:11:01.333 警告 [Catalina-utility-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc
Web应用程序 [ROOT] 注册了JDBC驱动程序 [org.postgresql.Driver],\ 但在Web应用程序停止时无法注销它。 为防止内
存泄漏,JDBC驱动程序已被强制取消注册。
16-Jul-2021 16:11:01.333 警告 [Catalina-utility-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads 
Web应用程序[ROOT]似乎启动了一个名为[globalEventExecutor-2-2]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈
跟踪:[
 java.base@11.0.11/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@11.0.11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
 java.base@11.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchr
onizer.java:2123)
 java.base@11.0.11/java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:458)
 io.netty.util.concurrent.GlobalEventExecutor.takeTask(GlobalEventExecutor.java:90)
 io.netty.util.concurrent.GlobalEventExecutor$TaskRunner.run(GlobalEventExecutor.java:230)
 io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
 java.base@11.0.11/java.lang.Thread.run(Thread.java:829)]
 
16-Jul-2021 16:11:01.335 严重 [Catalina-utility-2] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks 
web应用程序[ROOT]创建了一个ThreadLocal,其键类型为[java.lang.ThreadLocal](值为[java.lang.ThreadLocal@d24a8c7])
,值类型为[java.util.ArrayList](值为[[
net.luculent.liems.framework.core.database.Database@73da3894,  
net.luculent.liems.framework.core.database.Database@6efd6d84]),
但在停止web应用程序时未能将其删除。线程将随着时间的推移而更新,以尝试避免可能的内存泄漏
16-Jul-2021 16:11:08.453 信息 [Catalina-utility-2] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于
TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可
以缩短启动时间和JSP编译时间。

 分析日志,错误都指向了WebappClassLoaderBase.clear*()方法,在清除threadLocal中的db链接时没有成功,应该是db还没有被释放,所以才会提示clear方法失败。没释放的原因,也一定与tomcat重启有关。

接下来就是排查接口,果不其然。接口逻辑中存在 writeProp(str)方法,会对Config.properties文件进行写入,该文件在项目启动过程中已经加载一遍,又被改变,导致tomcat的重新启动。所以说日志文件的警告不是导致项目重启的原因,而是因为项目重启导致了这些警告。
修改tomcat下conf文件夹server.xml的配置<Context docBase='../sth' path='' reloadable='true' sessionCookieName='
LiemsCookie'></Context>,将reloadable属性修改为false,这样当resource下properties文件在运行期被修改时,tomcat就不会重新部署项目reload资源文件,推荐该属性值为false。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值