java - 使用 OkHttp 时 Webapp 取消部署内存泄漏,是否误报?

标签 java tomcat servlets jakarta-ee okhttp

OkHttp 在内部为连接池和某种看门狗创建线程。我见过很多人在使用这个库关闭应用程序时遇到这个问题。作者本身似乎并不愿意解决它(https://github.com/square/okhttp/issues/2482,“边际 yield ”)。具体来说,Tomcat 提示内存泄漏,因为线程被抛在后面。看起来这些最终被清理了,有时是在相当长的延迟之后。所以,我的问题是:实际上是否因为这个问题而导致内存泄漏?最终线程会消失,所以这应该意味着所有线程都可以被垃圾收集。正确吗?

最佳答案

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

您不应该在现代程序中进行代码卸载。 Tomcat 诞生于 JVM 是长生命周期容器的时代;今天是 Kubernetes 或其他集群编排技术。 Tomcat 的代码卸载策略迫使您跳过尴尬的管理环节。如果您正在与类加载器或安全管理器作斗争,那么您就是在虚构的问题上浪费时间。

关于java - 使用 OkHttp 时 Webapp 取消部署内存泄漏,是否误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537529/

相关文章:

java - 如何从 SOAP 端点接收 xml 响应?

java - 在 JUnit 3 中,测试共享 Spring 容器吗?

java - Tomcat 没有执行正确的领域

java - NullPointerExceptions 在停止发生后会导致 Tomcat 性能问题吗?

java - spring - jSTL - 错误 404 - 请求的资源不可用

java - 将 pdf 文件转换为单个 jpeg?

java - 如何获取在 servlet 过滤器的静态 block 内启动的静态类的实例?

java - Java + Jersey + Gradle-java.sql.SQLException:找不到合适的驱动程序

java - 通过程序运行 Jmeter 测试后,结果不会与列名称一起存储在 CSV 文件中(Java 代码)

java - 404错误请求的资源在apache tomcat 7中不可用