使用 OkHttp 时 Webapp 取消部署内存泄漏,是否误报?
Webapp undeployment memory leak when using OkHttp, false alarm or not?
OkHttp 在内部为连接池和某种看门狗创建线程。我见过很多人在使用这个库关闭应用程序时遇到这个问题。作者本身似乎并不愿意解决它 (https://github.com/square/okhttp/issues/2482, "marginal benefit")。具体来说,Tomcat 抱怨内存泄漏,因为线程被抛在后面。看起来这些 最终 被清理了,有时是在相当长的延迟之后。所以,我的问题是:实际上是否因为这个问题而导致内存泄漏?最终线程会消失,所以这应该意味着所有线程都可以被垃圾收集。正确吗?
我是那些不喜欢 Tomcat 代码卸载的 OkHttp 作者之一。我们将在下一个次要版本中发布我们自己的并发抽象; details here。这可能会缩短关闭最后一个响应和最后一个线程退出之间的 60 秒延迟。
你不应该在现代程序中进行代码卸载。 Tomcat 来自 JVM 是长寿命容器的时代;今天是 Kubernetes 或其他集群编排技术。 Tomcat 的代码卸载策略迫使您跳过尴尬的管理环节。如果您正在与 class 加载程序或安全管理员打交道,那么您就是在浪费时间解决一个编造的问题。
OkHttp 在内部为连接池和某种看门狗创建线程。我见过很多人在使用这个库关闭应用程序时遇到这个问题。作者本身似乎并不愿意解决它 (https://github.com/square/okhttp/issues/2482, "marginal benefit")。具体来说,Tomcat 抱怨内存泄漏,因为线程被抛在后面。看起来这些 最终 被清理了,有时是在相当长的延迟之后。所以,我的问题是:实际上是否因为这个问题而导致内存泄漏?最终线程会消失,所以这应该意味着所有线程都可以被垃圾收集。正确吗?
我是那些不喜欢 Tomcat 代码卸载的 OkHttp 作者之一。我们将在下一个次要版本中发布我们自己的并发抽象; details here。这可能会缩短关闭最后一个响应和最后一个线程退出之间的 60 秒延迟。
你不应该在现代程序中进行代码卸载。 Tomcat 来自 JVM 是长寿命容器的时代;今天是 Kubernetes 或其他集群编排技术。 Tomcat 的代码卸载策略迫使您跳过尴尬的管理环节。如果您正在与 class 加载程序或安全管理员打交道,那么您就是在浪费时间解决一个编造的问题。