gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:30 39 4
gpt4 key购买 nike

我有一个 Java + Spring 应用程序,它将使用 Jest 客户端查询 ElasticSearch(糟糕的选择,因为它的文档很少)。 ElasticSearch 在 150 个并发连接时的响应时间约为 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...

在真正快速地浏览源代码时,我看到你应该能够注入(inject) ClientConfig进入 Jest 客户端工厂。

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

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

也许调整其中一些会给你更多的联系?看看 JestClientFactory source看看它在做什么。过去,当使用 HttpClient 与同一服务器建立大量连接时,我们肯定不得不调整这些值。

关于java - 使用 Jest 的服务在线程池上阻塞,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19523287/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com