java-使用Jest的服务在线程池上阻塞,为什么?

我有一个Java Spring应用程序,它将使用Jest客户端查询Elasticsearch(选择不佳,因为文献不多).对于150个并发连接,Elasticsearch的响应时间约为8-20毫秒,但我的应用程序可达到900 -1500毫秒.快速查看VisualVM会告诉我处理器使用率低于10%,对其进行性能分析会告诉我该应用程序执行的所有时间中有98%是等待以下方法

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

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

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

有什么想法吗?

解决方法:

I think that the latency increase is excessive and I suspect that Jest is using an internal threadpool that has not enough threads to cope with all the requests…

在快速查看源代码时,我看到您应该能够将ClientConfig注入到Jest客户端工厂中.

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

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

也许对其中一些进行调整会给您带来更多的联系?看一下JestClientFactory source,看看它在做什么.在使用HttpClient与同一服务器建立大量连接时,过去肯定要调整这些值.

上一篇:【状态压缩DP】CF D. A Simple Task


下一篇:javascript-如何在玩笑中测试调用和应用功能?