Мне необходимо отслеживать время ответа, затрачиваемое набором URL-адресов для установления соединения с ними. Чтобы справиться с этим, я попытался реализовать решение, которое отслеживает 10 URL-адресов с интервалом в 5 минут. Во время запуска приложения несколько потоков начнут отслеживать URL-адрес. Это приводит к резкому увеличению времени ответа — задержке около 3 секунд — для каждого URL-адреса во время первого запроса. Последующие запросы стабильно возвращаются в течение примерно 80 миллисекунд.
Исходный код для создания HTTPClient
Код: Выделить всё
public HttpClient build() {
HttpClientBuilder builder = HttpClientBuilder.create();
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(Timeout.ofMilliseconds(0)).setResponseTimeout(Timeout.ofMilliseconds(0))
.setRedirectsEnabled(true).setMaxRedirects(5).build();
builder.setDefaultRequestConfig(config);
SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(new TrustAllStrategy()).build();
PoolingHttpClientConnectionManagerBuilder connectionManagerBuilder = PoolingHttpClientConnectionManagerBuilder.create();
connectionManagerBuilder.setTlsSocketStrategy(new DefaultClientTlsStrategy(sslContext, NoopHostnameVerifier.INSTANCE));
connectionManagerBuilder.setMaxConnTotal(3000);
connectionManagerBuilder.setMaxConnPerRoute(300);
builder.setConnectionManager(connectionManagerBuilder.build());
Registry authSchemeRegistry = RegistryBuilder.create()
.register(StandardAuthScheme.BASIC, BasicSchemeFactory.INSTANCE)
.register(StandardAuthScheme.DIGEST, DigestSchemeFactory.INSTANCE)
.register(StandardAuthScheme.NTLM, NTLMSchemeFactory.INSTANCE)
.register(StandardAuthScheme.KERBEROS, KerberosSchemeFactory.DEFAULT)
.register(StandardAuthScheme.BEARER, BasicSchemeFactory.INSTANCE)
.build();
builder.setDefaultAuthSchemeRegistry(authSchemeRegistry);
CookieStore cookieStore = new BasicCookieStore();
builder.setDefaultCookieStore(cookieStore);
CloseableHttpClient client = builder.build();
return client;
Примеры журналов:
[15:38:47:093]|[10-15-2025]|[org.apache.hc.client5.http.impl.classic.InternalHttpClient]|[FINE]|[358]: ex-0000000002 подготовка выполнения запроса|
[15:38:47:375]|[10-15-2025]|[org.apache.hc.client5.http.impl.classic.InternalHttpClient]|[FINE]|[358]: ex-0000000002 получение конечной точки (3 МИНУТЫ)|
[15:38:47:469]|[15-10-2025]|[org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager]|[FINE]|[358]: ex-0000000002 запрос на аренду конечной точки (3 МИНУТЫ) [маршрут: {s}->[https://www.google.com:443]][всего доступно: 0; выделенный маршрут: 0 из 300; всего выделено: 0 из 3000]|
[15:38:47:628]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager]|[FINE]|[358]: конечная точка ex-0000000002 арендована [маршрут: {s}->[https://www.google.com:443]][всего доступно: 0; выделенный маршрут: 1 из 300; всего выделено: 1 из 3000]|
[15:38:48:003]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager]|[FINE]|[358]: ex-0000000002 приобретено ep-0000000006|
[15:38:48:084]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager]|[FINE]|[358]: ep-0000000006 подключение конечной точки к https://www.google.com:443 (25000 МИЛЛИСЕКУНДЫ)|
[15:38:48:104]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator]|[FINE]|[358]: www.google.com разрешение удаленного адреса|
[15:38:48:114]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator]|[FINE]|[358]: www.google.com разрешено как [www.google.com/142.251.220.110]|
[15:38:48:115]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator]|[FINE]|[358]: https://www.google.com:443 подключение null->www.google.com/142.251.220.110:443 (25000 МИЛЛИСЕКУНД)|
[15:38:48:175]|[15-10-2025]|[org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator]|[FINE]|[358]: http-outgoing-0 https://www.google.com:443 подключено xxxxxxx/xxx->www.google.com/142.251.220.110:443|
[15:38:48:178]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator]|[FINE]|[358]: http-outgoing-0 https://www.google.com:443 обновление до TLS|
[15:38:48:295]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator]|[FINE]|[358]: http-outgoing-0 https://www.google.com:443 обновлено до TLS|
[15:38:48:296]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager]|[FINE]|[358]: ep-0000000006 подключен http-outgoing-0|
[15:38:48:401]|[10-15-2025]|[org.apache.hc.client5.http.impl.io.DefaultManagedHttpClientConnection]|[FINE]|[358]: http-outgoing-0 устанавливает таймаут сокета на 25000 МИЛЛИСЕКУНД|
[15:38:48:437]|[10-15-2025]|[org.apache.hc.client5.http.headers]|[FINE]|[358]: http-outgoing-0 >> GET / HTTP/1.1
[15:38:48:706]|[10-15-2025]|[org.apache.hc.client5.http.headers]|[FINE]|[358]: http-outgoing-0
Подробнее здесь: https://stackoverflow.com/questions/797 ... ient-5-4-4
Мобильная версия