Задержка времени ответа при холодном запуске с использованием Apache HttpClient 5.4.4Apache

Ответить
Anonymous
 Задержка времени ответа при холодном запуске с использованием Apache HttpClient 5.4.4

Сообщение Anonymous »

Я использую httpClient 5.4.4 с CloseableHttpClient, обслуживаемым PoolingHttpClientConnectionManager.
Мне необходимо отслеживать время ответа, затрачиваемое набором 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Apache»