
Tenemos un NGINX ejecutándose con muchos hosts virtuales (~600). Desafortunadamente, cada uno de los trabajadores de NGINX está usando una gran cantidad de memoria residencial (~6GB).
Al inspeccionar la memoria (cadenas), se obtiene la metainformación duplicada que normalmente se encuentra en los certificados SSL (duplicada hasta más de 100.000 veces). Solo utilizamos unos pocos certificados diferentes.
Sospeché que ssl_session_cache podría ser el culpable. Está configurado para
ssl_session_cache compartido:SSL:10m;
lo que aumentaría muy bien nuestro uso de memoria (10 MB*600 = 6 GB) Pero según los documentoshttp://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache
Se puede utilizar un caché con el mismo nombre en varios servidores virtuales.
Y aumentar ese valor aparentemente no tiene ningún efecto en el uso de la memoria.
También dependemos en gran medida de lua-resty, pero ¿eso no debería afectar la forma en que se maneja SSL?
¿Sabes qué podría estar causando este alto uso de memoria?
Versión de nginx: openresty/1.13.6.1
Respuesta1
Supongo que esto sucede porque nginx tiene una memoria separada asignada para la configuración de cada servidor virtual, y esa área de memoria incluye una copia del certificado que se está utilizando. Esto implica que incluso si solo tiene unos pocos certificados separados, se duplican en la memoria cuando se usan en servidores virtuales separados.
La caché de sesión SSL no contiene datos de certificado, solo contiene datos de sesión para sesiones SSL activas entre clientes y el servidor.
Respuesta2
Usábamos Openresty principalmente para autenticación. Como sospechábamos que Openresty causaba un alto uso de memoria, extrajimos todas las partes de lua con un auth_request
Ahora tenemos un nginx que vuelve a openresty para la autenticación.
Con la misma cantidad de hosts y certificados SSL, ahora tenemos un uso de memoria mucho menor (~150 MB por trabajador en lugar de 6 GB). Además, openresty sólo utiliza una cantidad insignificante de memoria. Entonces parece haber habido algún problema con openresty en combinación con otras partes de nuestra configuración.
Si bien esto no responde exactamente a la pregunta original, es una solución útil para nosotros y, con suerte, para cualquier otra persona que se enfrente a este problema.