Welcome! Log In Create A New Profile

Advanced

Re: HTTPS грузит только одно ядро процессора

Maxim Dounin
March 29, 2016 10:38PM
Hello!

On Tue, Mar 29, 2016 at 07:45:13PM -0400, Maximus43 wrote:

> Здравствуйте!
>
> Операционная система FreeBSD 10.2-RELEASE.
> Версия - nginx/1.9.12
>
> Проблема в следующем:
> при тестировании http нагрузка распределяется по workers равномерно,
> производительность высокая. При тестировании https нагрузка идет на одно
> ядро системы, top выглядит вот так:
> last pid: 8458; load averages: 0.61, 0.25, 0.26
> up 0+04:33:46 23:42:54
> 26 processes: 1 running, 25 sleeping
> CPU: 12.4% user, 0.0% nice, 0.1% system, 0.4% interrupt, 87.1% idle
> Mem: 138M Active, 1380M Inact, 623M Wired, 827M Buf, 5763M Free
> Swap: 764M Total, 764M Free
>
> PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU
> COMMAND
> 8419 www 33 22 -5 948M 71348K uwait 3 2:13 99.37% nginx
> 7661 www 33 49 -5 928M 56440K uwait 0 1:31 0.00% nginx
> 1112 root 1 20 0 26152K 18072K select 5 0:02 0.00% ntpd
> 1166 root 1 27 0 61224K 7012K select 7 0:02 0.00% sshd
> 7653 root 1 43 0 932M 64412K pause 6 0:01 0.00% nginx

[...]

> Результаты тестов http и https отличаются на два порядка.Куда копать?
> Заранее спасибо!

Наиболее затратная часть в https - это handshake, и упирается он в
процессор. Сколько именно будет стоить handshake - зависит от
используемых шифров. Типичные цифры - ~600 handshake'ов в секунду
на ядро при использовании RSA 2048 бит. Если же взять ключи
побольше или использовать в добавок обмен эфимерными ключами
Diffie-Hellman'а, то можно и десятки handshake'ов в секунду
получить. Так что два порядка разницы между http и https - это не
странно ни разу. Основной метод борьбы с этим в реальной жизни -
использование постоянных соединений и кеширование сессий, см.
http://nginx.org/r/ssl_session_cache/ru.

Кроме того, поведение nginx'а по умолчанию рассчитано на большое
количество клиентов, и если ваши тесты не обеспечивают
достаточного параллелизма - всё достаточно легко может уйти в один
процесс. Особенно на FreeBSD, где nginx точно знает, сколько
соединений ожидает в очереди, и может их все принять скопом - что
обычно хорошо, но при микробенчмарках https - не очень, т.к. не
позволяет полностью утилизировать все имеющиеся ядра процессора.
Для микробенчмарков - стоит как минимум выключать accept_mutex,
см. http://nginx.org/r/accept_mutex/ru.

--
Maxim Dounin
http://nginx.org/

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

HTTPS грузит только одно ядро процессора

Maximus43 March 29, 2016 07:45PM

Re: HTTPS грузит только одно ядро процессора

Maxim Dounin March 29, 2016 10:38PM

Re: HTTPS грузит только одно ядро процессора

Maximus43 March 31, 2016 05:31PM

Re: HTTPS грузит только одно ядро процессора

Andrei Belov March 29, 2016 11:38PM

Re: HTTPS грузит только одно ядро процессора

Maximus43 March 31, 2016 05:29PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 248
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready