Назад | Перейти на главную страницу

Nginx дублирует использование высокой памяти SSL

У нас есть NGINX, работающий с большим количеством виртуальных хостов (~ 600). К сожалению, каждый из рабочих NGINX использует большой кусок внутренней памяти (~ 6 ГБ)

При проверке памяти (строк) он дает дублирующуюся метаинформацию, которую вы обычно находите в сертификатах SSL (дублированные до более чем 100 000 раз). Мы используем только несколько разных сертификатов.

Я подозревал, что виновником может быть ssl_session_cache. Он установлен на

ssl_session_cache общий: SSL: 10 м;

что неплохо увеличило бы использование памяти (10 МБ * 600 = 6 ГБ), но согласно документам http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache

Кэш с таким же именем может использоваться на нескольких виртуальных серверах.

И увеличение этого значения, по-видимому, не влияет на использование памяти.

Мы также сильно полагаемся на lua-resty, но это не должно повлиять на то, как обрабатывается SSL?

Вы знаете, что могло вызвать такое высокое использование памяти?

версия nginx: openresty / 1.13.6.1

Мы использовали Openresty в основном для аутентификации. Поскольку мы подозревали, что Openresty вызывает чрезмерное использование памяти, мы извлекли все части lua с помощью auth_request Теперь у нас есть nginx, который возвращается к openresty для аутентификации.

При том же количестве хостов и SSL-сертификатов у нас теперь гораздо меньше памяти (~ 150 МБ на одного рабочего вместо 6 ГБ). Также openresty использует незначительный объем памяти. Так что, похоже, была некоторая проблема с openresty в сочетании с другими частями нашей конфигурации.

Хотя это не совсем ответ на исходный вопрос, это полезный обходной путь для нас и, надеюсь, для всех, кто столкнется с этой проблемой.

Я предполагаю, что это происходит потому, что nginx имеет отдельную память, выделенную для настроек каждого виртуального сервера, и эта область памяти включает копию используемого сертификата. Это означает, что даже если у вас есть только несколько отдельных сертификатов, они дублируются в памяти, когда используются на отдельных виртуальных серверах.

Кэш сеанса SSL не содержит данных сертификата, он содержит только данные сеанса для активных сеансов SSL между клиентами и сервером.