【问题标题】:Removing threadLocal objects on tomcat threads while app shutdown在应用程序关闭时删除tomcat线程上的threadLocal对象
【发布时间】:2014-04-10 06:16:07
【问题描述】:

我正在开发 Web 服务并创建线程本地实例,并且只想在应用程序关闭期间删除它们(一旦为线程创建了 threadlocal 对象,我想在该线程上的不同服务调用期间使用该对象)。由于线程是由 tomcat 创建和拥有的,有没有办法在应用程序关闭期间删除这些线程本地?

【问题讨论】:

标签: java tomcat threadpool thread-local


【解决方案1】:

Tomcat 6 具有内存泄漏检测功能,而 Tomcat 7 具有实际的删除逻辑 - 它会自动为您删除所有线程本地对象:http://wiki.apache.org/tomcat/MemoryLeakProtection

理想情况下,您应该在请求完成后从线程本地删除所有对象,因为同一个线程将被放回线程池并用于服务其他请求 - 在这种情况下,线程本地值可能会干扰后续请求逻辑,并导致各种安全问题。

但是,如果您特别希望在 Tomcat webapp 的整个生命周期内将值保持在本地线程中 - Tomcat 7 会在 webapp 关闭时为您清理它,请将其视为垃圾收集。

【讨论】:

  • 我用的是tomcat8,还是能搞定
  • 你还得到什么?如果您收到有关检测到内存泄漏并删除过时对象的通知,这是意料之中的
  • 我得到一个关于tomcat8内存泄漏的错误。我认为它正在处理它。此外,当我运行 shutdown.sh 时,它不会关闭我需要终止进程的 tomcat。有关系吗?
  • 错误是什么?这不应该是一个错误。如果tomcat没有停止你可能有一些不能被杀死的东西,数据库连接?
  • 我在这里发布了一个新问题:stackoverflow.com/questions/28105803/tomcat8-memory-leak,因为错误太长,无法发表评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多