【发布时间】:2017-02-18 14:54:11
【问题描述】:
我的堆栈是 Tomcat8,上面有 Spring 和 JAX-RS (Jersey)。这会公开一个供最终用户使用的 REST API。在这些 REST 端点中,我需要一个到古老后端的套接字连接。为每个请求设置和销毁这些套接字连接的成本很高。我正在考虑将连接存储在线程局部变量中。
要做到这一点,我们需要保证 http-bio-8080-exec-[identifier] 线程永远不会被杀死。如果是这种情况,我们最终会得到一个永远不会关闭的悬空套接字连接。最终,我们将耗尽可用的套接字(内存泄漏)。
我浏览了几个文档,但找不到任何有用的东西。所以我的问题是:http-bio-8080-exec-[identifier] 线程后面的线程池只会增长,还是会缩小?
另一种选择是引入一个保存套接字连接的旧对象池,但我认为线程本地方法会更好,因为每个 REST 请求都需要该套接字连接,所以池的大小是相同的作为 http 工作人员的数量。在这种情况下,这是使用线程局部变量而不是对象池的好理由吗?
【问题讨论】:
标签: java spring multithreading jax-rs tomcat8