- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在高负载下使用 HttpAsyncClient。我这样创建 HttpAsyncClient:
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(CONNECT_TIMEOUT)
.setSocketTimeout(SOCKET_TIMEOUT)
.setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT)
.build();
HttpAsyncClient client = HttpAsyncClients.custom()
.setDefaultRequestConfig(createRequestConfig())
.build();
然后我像这样使用它:
HttpPost request = new HttpPost(url);
request.setEntity(new StringEntity(requestBody, "UTF-8"));
client.execute(request, null)
通常我不太关心响应,所以我不初始化Future<HttpResponse>
变量,不要做 Future.get()
.好吧,只是为了澄清(我认为这与问题无关),我有时会关心回复,但 99% 的回复对我来说并不有趣。
问题是当我发出大量请求时(例如每秒 300 次,这里的“请求”一词是指 client.execute()
调用)我最终得到 java.lang.OutOfMemoryError: GC overhead limit exceeded
.我尝试使用 VisualVM 来了解发生了什么。我看到了 java.lang.Object[]
, char[]
, java.lang.String
, byte[]
, short
, char[]
实例数在增长(我试图强制执行 GC 并限制堆大小以确保它不正常 - 没有帮助)。已用堆空间的增长也是如此。
是什么导致了这个问题?也许我应该使用 HttpAsyncClient
一些不同的方式?我需要使用自定义 RequestProducer
吗? , ResponseProducer
或使用 CountDownLatch
?
UPD问题是因为 PowerMock 库
最佳答案
HttpAsyncClient 不会以任何方式或方式限制请求执行速率以避免阻塞#execute 方法。可以向客户端提交无限数量的请求,客户端会尽职尽责地将它们全部放入执行队列。这些请求实际执行和从队列中删除的速度有多快是一个完全不同的故事,并且可能取决于许多因素。在您的特定情况下,您正在尝试处理所有这些请求,每个路由只有 2 个并发连接,这可能不一定是最佳选择。
PS:/老人的牢骚/人们不应该假设异步客户端会出于某种原因更快。除非用于特定用例并以特定方式使用,否则它们不会。可以肯定的是,除非非常小心,否则很容易在异步客户端上使用更多内存。
关于java - Apache HttpAsyncClient 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811632/
我正在测试 Apache HttpAsyncClient ,特别是我想在需要身份验证的地方发出异步 HTTP POST 请求。我用this example作为引用。到目前为止,我找到了如何设置应用程序
我正在尝试在 httpAsyncClient 库中设置 cookie,但问题是我不知道如何找到它的示例..这是我的代码。 public JSONArray sendRequest(List post
我想了解有关 HttpAsyncClient 的一些基本概念。 我这里没有使用连接池,这里关闭失败的http请求的正确方法是什么(1)或(2)。 如果我用每个新请求初始化 httpclient,会对性
我想向 java 中的 servlet 发送异步 post 请求。我正在使用 apache HttpAsyncClient,如以下方法所示。当我调试时,我看到调用此方法的进程会等待,直到被调用的 se
我正在尝试使用 HttpAsyncClient 通过每秒提交一百或一千个 HTTP 请求并对每个请求的响应进行计时来对我的 Web 应用程序进行压力测试。我的代码基于 this quickstart
使用典型的 HttpAsyncClients 示例: public class AsyncClientHttpExchange { public static void main(final
在 Linux 上运行时(仅在 Linux 上尝试过),根据 lsof,以下代码似乎泄漏了 1 个 anon_inode 和 2 个管道文件描述符: CloseableHttpAsyncClient
我需要在高负载下使用 HttpAsyncClient。我这样创建 HttpAsyncClient: RequestConfig requestConfig = RequestConfig.custom
我想实现一个基于 NIO 的 aws java 客户端并且正在考虑使用 HttpAsyncClient但它处于 Alpha 3 阶段。有没有人有在任何负载下使用客户端的经验?另外,我们什么时候可以期待
我在 httpasyncclient 上使用代理,如下所示: final CloseableHttpAsyncClient httpclient = HttpAsyncClients
我的应用程序必须提供请求“转发”机制,从某种意义上说,它处理传入的请求并通过从根据请求确定的“目标”系统之一检索数据来响应它。这是通过 HttpAsyncClient 的集合来实现的,每个 HttpA
在 HttpClient 的早期版本中,目标主机被设置为客户端本身。在上一个版本中(对于 HttpAsyncClient,它是 4.1.1)主机被设置为 HttpRequest(HttpGet、Htt
与这个问题密切相关:How to use HttpClient with multithreaded operation? ,我想知道 apache HttpAsyncClient 是否是线程安全的,
使用 Apache HttpAsyncClient Beta3,当我将它加载到各种服务器的多达 50 个并发请求时,它似乎开始时很好,我处理了大约 3000 个 url。 但后来我遇到了瓶颈,我通过日
我是否需要像使用 HttpClient 那样关闭 Apache HttpAsyncClient 中的过期连接? 最佳答案 我只是仔细检查了源代码。是的,仍然必须明确地从池中驱逐过期的连接。但是,底层的
我正在用 Java 实现网络抓取工具。在尝试了一些我要抓取的网站之后,我想使用 Java 中并发 HTTP 连接的最佳实践。我目前正在使用 Jsoup's连接方法。我想知道是否可以创建线程并在这些线程
在我的 servlet 中,我正在执行以下代码: RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000)
package com.lt.uadb.app.resource.test; import java.util.concurrent.Future; import org.apache.http.Ht
我正在使用 HttpAsyncClient 和 Jsoup 为特定站点编写网络抓取工具。我正在使用 HttpAsyncClient 的一个实例,它执行来自不同线程的多个请求。在几次成功的请求之后,客户
我正在尝试通过 Java 使用 ElasticSearch REST API Apache HttpAsyncClient图书馆。我想使用持久流水线连接。这是一些测试代码(输出在注释中): @Test
我是一名优秀的程序员,十分优秀!