Java池连接优化
在Java中,配置http连接池以支持对同一服务器的大量并发http调用的commons指南/建议有哪些?我的意思是:Java池连接优化,java,multithreading,apache,http,Java,Multithreading,Apache,Http,在Java中,配置http连接池以支持对同一服务器的大量并发http调用的commons指南/建议有哪些?我的意思是: 最大总连接数 每个路由的最大默认连接数 重用策略 生存策略 持续时间 连接超时 (我正在使用ApacheHTTP组件4.3,但我可以探索新的解决方案) 为了更清楚,我的情况如下: 我开发了一个REST资源,它需要对AWS CloudSearch执行大约10个http调用,以获得要在最终结果中收集的搜索结果(我确实无法通过单个查询获得)。 整个操作所需时间必须少于0.25秒
- 最大总连接数
- 每个路由的最大默认连接数
- 重用策略
- 生存策略
- 持续时间
- 连接超时
谢谢大家! 最适合您的实现的线程/连接数量取决于该实现(您没有发布),但以下是一些需要的指导原则:
- 如果这些线程根本不阻塞,那么您应该拥有与内核一样多的线程(Runtime.availableCores(),这将包括超线程内核)。仅仅因为不可能100%以上的CPU使用率
- 如果线程很少阻塞,cores*2是基准测试的良好开端
- 如果线程经常阻塞,则绝对需要使用各种设置对应用程序进行基准测试,以找到适合您的实现、操作系统和硬件的最佳解决方案
第一次连接需要>1秒,因为它实际上必须通过DNS查找地址。所有其他连接暂时处于暂停状态,因为这样做两次没有意义。您可以通过调用IP(如果您与负载平衡器交谈,可能不太好)或通过使用初始请求“预热”连接来避免这种情况。之后的任何新连接都将使用缓存的DNS结果,但仍需要执行其他初始化,因此尽可能多地重用连接将大大减少延迟。对于NIO,这是一项非常简单的任务 此外还有,也就是说:您建立一个连接,但在一个请求中请求多个URL,并通过“同一行”得到多个响应。这大大减少了连接开销,但需要服务器支持