JAX-RS客户端:KeepAliveCache中的许多实例

时间:2016-06-14 13:42:45

标签: java rest jersey jax-rs cxf

我正在运行Java微服务,使用JAX RS Client类的Apache CXF实现发出许多REST客户端请求。在重复10个并发请求时,我在sun.net.www.http.KeepAliveCache内看到350多个映射条目,消耗了大量的堆内存。这是我想要释放的记忆。

在这个例子中,我一直向同一主机(目标)发出相同的请求,我不明白为什么许多条目都保存在缓存中。大约10不够吗?我也无法弄清楚如何重新使用连接/客户端实例/ ....

在我的代码中,我只创建Client类的单个实例。然后将其与client.target(...).request().get()一起使用。

我很高兴得到一些关于如何在CXF上使用连接管理器的提示 - 假设这有助于解决我的问题。

作为旁注,SSLSocketImpl.startHandshake花费了大量的CPU时间。如果这可以避免(它始终是同一个主机!),我也很乐意得到一些提示。

编辑:我在读完实体之后很快就使用try-finally关闭了response个对象。但我从不关闭Client实例。

编辑2:重用同一个Client实例并不是一个好主意,因为Apache CXF不提供线程安全实现。由于我没有看到性能损失,我只需要在需要实例时创建一个新的Client。但这与此处列出的问题无关。

编辑3:与Jersey客户端相同的问题。

0 个答案:

没有答案