3

我有一个 Java + Spring 应用程序,它将使用 Jest 客户端查询 ElasticSearch(选择不好,因为它的文档很差)。ElasticSearch 的响应时间约为 8-20 毫秒,有 150 个并发连接,但我的应用程序高达 900 -1500 毫秒。快速浏览一下 VisualVM 告诉我处理器使用率低于 10%,分析它告诉我应用程序在 98% 的时间里都在等待以下方法

org.apache.http.pool.PoolEntryFuture.await()

这是 Apache HttpCore 的一部分,也是 Jest 的依赖项。我对可以在 tomcat 上运行的线程没有限制(最大为 200,VisualVM 表示实验期间的最大线程数为 174)。所以它不是在等待空闲线程。

我认为延迟增加过多,我怀疑 Jest 使用的内部线程池没有足够的线程来处理所有请求,但我不知道。

想法?

4

2 回答 2

4

我认为延迟增加过多,我怀疑 Jest 使用的内部线程池没有足够的线程来处理所有请求......

在真正快速地浏览源代码时,我看到您应该能够将 aClientConfig注入 Jest 客户端工厂。

具有以下ClientConfig似乎会影响内部 Apache http 客户端连接管理器的设置器:

clientConfig.maxTotalConnection(...);
clientConfig.defaultMaxTotalConnectionPerRoute(...);
clientConfig.maxTotalConnectionPerRoute(...);

也许调整其中一些会给你更多的联系?看看JestClientFactory源代码,看看它在做什么。过去,在使用HttpClient.

于 2013-10-22T17:02:04.710 回答
0

我将只用一个连接进行测试,看看平均响应时间是多少。只有一个线程,您应该拥有足够多的线程和资源等。该进程很可能正在等待外部资源,如数据库或网络服务。

于 2013-10-22T16:31:59.467 回答