Рейтинг:0

Высокая загрузка процессора через TCP

флаг mw

Я использую haproxy 2.4, и когда haproxy настроен в режиме tcp, я получаю высокую загрузку процессора.

Пример:

Запуск стресс-инструмента для создания около 30 тыс. подключений:

./pst -c 100000 -r 100000 -u URL-адрес.txt -p http://192.168.58.13:3128

Использование процессора во всех процессах haproxy достигает почти 100%, а нагрузка составляет 4+. Запуск того же теста в режиме http.

Загрузка процессора составляет около 10% на каждый процесс, а нагрузка составляет 1,20.

Я также пытаюсь использовать nbthread вместо nbproc, но получаю те же результаты.

Кроме того, эта проблема сохраняется на haproxy 2.5.

Файл конфигурации в режиме HTTP:

№ 1,5
# ЦП 11
Глобальный
    журнал 127.0.0.1 локальный0
    максконн 200000
    нбпрок 11
    карта процессора 1 0
    карта процессора 2 1
    карта процессора 3 2
    карта процессора 4 3
    карта процессора 5 4
    карта процессора 6 5
    карта процессора 7 6
    карта процессора 8 7
    карта процессора 9 8
    карта процессора 10 9
    карта процессора 11 10
    ИД 0
    Гид 0
    chroot/тмп
    pid-файл /var/run/haproxy.pid
    сокет статистики /var/run/haproxy.stat режим 600 уровня администратора
    статистика связывания-процесс 1
    демон
# отладка
#   тихо

значения по умолчанию
    журнал глобальный
    HASTATS в формате журнала:::%{+Q}o:::client_ip=%ci:::client_port=%cp:::datetime_of_request=[%tr]:::frontend_name_transport=%ft:::backend_name=%b :::server_name=%s:::time_to_receive_full_request=%TR:::Tw=%Tw:::Tc=%Tc:::response_time=%Tr:::active_time_of_request=%Ta:::status_code=%ST: ::bytes_read=%B:::captured_request_cookie=%CC:::captured_response_cookie=%CS:::termination_state_with_cookie_status=%tsc:::actconn=%ac:::feconn=%fc:::beconn=%bc:: :srv_conn=%sc:::retries=%rc:::srv_queue=%sq:::backend_queue=%bq:::captured_request_headers_default_style=%hr:::captured_response_headers_default_style=%hs:::server_ip=%si::: server_port=%sp:::frontend_name=%f:::http_method=%HM:::http_request_uri_without_query=%HP:::http_request_query_string=%HQ:::http_request_uri=%HU:::bytes_uploaded=%U:::ssl_ciphers =%sslc:::ssl_version=%sslv:::%[capture.res.hdr(0)]
    режим http
    опция
    повторяет 3
    опция повторной отправки
    максконн 200000
    тайм-аут подключения 5000
    тайм-аут клиента 50000
    тайм-аут сервера 50000

интерфейс ddsds
    привязать :3128 имя ddsds
    заголовок запроса захвата Host len ​​1024
    захват заголовка запроса Content-Type len 1024
    захват заголовка запроса User-Agent len ​​1024
    захват заголовка запроса Referer len 1024
    захват заголовка запроса X-Forwarded-For len 1024
    захват заголовка ответа Content-Type len 1024
    захватить cookie Cookie_2 len 100
    http-запрос set-header mode mode:tcp
    захват http-запроса hdr(режим) len 10
    режим http
    опция httplog
# http-поддержка активности: * 1 *
    опция http-keep-alive
    тайм-аут http-keep-alive 15000
    опция предпочитаемый-последний-сервер
    опция повторной отправки
    без вариантов
    вариант http-туннеля
    тайм-аут клиента 15000
    таймаут http-запроса 50000
    очередь ожидания 50000

    default_backend default_ddsds

серверная часть default_ddsds
    режим http
    баланс
# http-поддержка активности: * 1 *
    опция http-keep-alive
    тайм-аут http-keep-alive 15000
    опция предпочитаемый-последний-сервер
    опция повторной отправки
    без вариантов
    вариант http-туннеля
    тайм-аут подключения 4000
    тайм-аут сервера 50000
    таймаут http-запроса 50000
    очередь ожидания 50000
    повторяет 3

    сервер normal_port 192.168.58.12:50877 вес 1 maxconn 10000 проверка меж 60000 подъем 2 падение 3 источник 192.168.58.13

# ddsds нет результата
страница администратора_интерфейса
    привязать 127.0.0.1:64741
    режим http
    включить статистику
    статистика обновляется 10 секунд
    статистика uri /stats

Файл конфигурации в режиме TCP:

№ 1,5
# ЦП 11
Глобальный
    журнал 127.0.0.1 локальный0
    максконн 200000
    нбпрок 11
    карта процессора 1 0
    карта процессора 2 1
    карта процессора 3 2
    карта процессора 4 3
    карта процессора 5 4
    карта процессора 6 5
    карта процессора 7 6
    карта процессора 8 7
    карта процессора 9 8
    карта процессора 10 9
    карта процессора 11 10
    ИД 0
    Гид 0
    chroot/тмп
    pid-файл /var/run/haproxy.pid
    сокет статистики /var/run/haproxy.stat режим 600 уровня администратора
    статистика связывания-процесс 1
    демон
# отладка
#   тихо

значения по умолчанию
    журнал глобальный
    HASTATS в формате журнала:::%{+Q}o:::client_ip=%ci:::client_port=%cp:::datetime_of_request=[%tr]:::frontend_name_transport=%ft:::backend_name=%b :::server_name=%s:::time_to_receive_full_request=%TR:::Tw=%Tw:::Tc=%Tc:::response_time=%Tr:::active_time_of_request=%Ta:::status_code=%ST: ::bytes_read=%B:::captured_request_cookie=%CC:::captured_response_cookie=%CS:::termination_state_with_cookie_status=%tsc:::actconn=%ac:::feconn=%fc:::beconn=%bc:: :srv_conn=%sc:::retries=%rc:::srv_queue=%sq:::backend_queue=%bq:::captured_request_headers_default_style=%hr:::captured_response_headers_default_style=%hs:::server_ip=%si::: server_port=%sp:::frontend_name=%f:::http_method=%HM:::http_request_uri_without_query=%HP:::http_request_query_string=%HQ:::http_request_uri=%HU:::bytes_uploaded=%U:::ssl_ciphers =%sslc:::ssl_version=%sslv:::%[capture.res.hdr(0)]
    режим http
    опция
    повторяет 3
    опция повторной отправки
    максконн 200000
    тайм-аут подключения 5000
    тайм-аут клиента 50000
    тайм-аут сервера 50000

интерфейс ddsds
    привязать :3128 имя ddsds
    заголовок запроса захвата Host len ​​1024
    захват заголовка запроса Content-Type len 1024
    захват заголовка запроса User-Agent len ​​1024
    захват заголовка запроса Referer len 1024
    захват заголовка запроса X-Forwarded-For len 1024
    захват заголовка ответа Content-Type len 1024
    захватить cookie Cookie_2 len 100
    http-запрос set-header mode mode:tcp
    захват http-запроса hdr(режим) len 10
    режим TCP
    опция httplog
    опция
    вариант http-туннеля
    тайм-аут клиента 15000
    таймаут http-запроса 50000
    очередь ожидания 50000

    default_backend default_ddsds

серверная часть default_ddsds
    режим TCP
    баланс
    вариант http-туннеля
    тайм-аут подключения 4000
    тайм-аут сервера 50000
    таймаут http-запроса 50000
    очередь ожидания 50000
    повторяет 3

    сервер normal_port 192.168.58.12:50877 вес 1 maxconn 10000 проверка меж 60000 подъем 2 падение 3 источник 192.168.58.13

# ddsds нет результата
страница администратора_интерфейса
    привязать 127.0.0.1:64741
    режим http
    включить статистику
    статистика обновляется 10 секунд
    статистика uri /stats

Любой может помочь мне решить эту проблему.

Заранее спасибо.

Steffen Ullrich avatar
флаг se
Я не знаю, что вы ожидали здесь. HTTPS требует больше вычислительных ресурсов, чем HTTP. Это особенно верно для начального рукопожатия TLS с обменом ключами.
c4f4t0r avatar
флаг nl
ваш http-тест с использованием keep-alive?
флаг mw
Привет, стресс-тест проводится по протоколу HTTP, а не HTTPS. Также проблема возникает только тогда, когда Haproxy настроен в режиме TCP, с режимом HTTP работает нормально. Могу ли я использовать keep-alive в режиме TCP?
флаг jp
Я подозреваю, что все эти «захват заголовка запроса» в режиме «http» требуют дополнительных тактов ЦП.
флаг mw
Привет, проблема возникает только в TCP, в HTTP все в порядке, проблем с процессором нет.
флаг mw
Я удалил заголовки захвата, и результат тот же. В http с подключением 20k, загрузкой процессора 18% и нагрузкой 2, в TCP только с подключением 10k, использованием процессора 90% и нагрузкой 8.
флаг mw
Привет Любое обновление по этому поводу, пожалуйста.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.