使用OkHttp时Webapp取消部署内存泄漏,是否出现错误警报?

时间:2019-10-24 08:44:07

标签: java tomcat servlets java-ee okhttp

OkHttp在内部为连接池和某种看门狗创建线程。我已经看到有很多人在使用该库关闭应用程序时为此而苦苦挣扎。作者自己似乎不愿意解决这个问题(https://github.com/square/okhttp/issues/2482,“边际收益”)。特别是,Tomcat抱怨内存泄漏,因为线程被遗忘了。看起来这些东西最终会被清理 ,有时会经过相当长的延迟。所以,我的问题是:是否由于这个问题而实际上存在内存泄漏?最终线程消失了,因此这意味着可以对所有线程进行垃圾回收。是吗?

1 个答案:

答案 0 :(得分:1)

我是不喜欢Tomcat代码卸载的OkHttp作者之一。我们将在下一个次要版本中发布我们自己的并发抽象。 details here。这可能会缩短关闭最后一个响应和退出最后一个线程之间的60秒延迟。

您不应该在现代程序中卸载代码。 Tomcat来自JVM是长期存在的容器的时代。今天就是Kubernetes或其他集群编排技术。 Tomcat的代码卸载策略迫使您跳过笨拙的管理难题。如果您要与类加载器或安全管理器对抗,那么您将浪费时间在虚假问题上。