Nginx 高内存使用率重复 SSL

Nginx 高内存使用率重复 SSL

我们有一个运行着大量虚拟主机(约 600 个)的 NGINX,不幸的是,每个 NGINX 工作器都占用了大量的内存(约 6GB)

检查内存(字符串)时,它会生成通常在 SSL 证书中发现的重复元信息(重复次数高达 100,000 次以上)。我们仅使用少数不同的证书。

我怀疑 ssl_session_cache 可能是罪魁祸首。它被设置为

ssl_session_cache共享:SSL:10米;

这将很好地增加我们的内存使用量(10MB*600=6GB)但根据文档http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache

同名的缓存可以在多个虚拟服务器中使用。

并且增加该值显然不会影响内存使用。

我们也严重依赖 lua-resty,但这不应该影响 SSL 的处理方式吗?

您知道是什么原因造成内存使用率这么高吗?

nginx 版本:openresty/1.13.6.1

答案1

我认为这种情况发生是因为 nginx 为每个虚拟服务器的设置分配了单独的内存,并且该内存区域包含正在使用的证书的副本。这意味着即使您只有几个单独的证书,当它们在单独的虚拟服务器中使用时,它们也会在内存中被复制。

SSL 会话缓存不包含证书数据,它仅包含客户端和服务器之间的活动 SSL 会话的会话数据。

答案2

我们主要使用 Openresty 进行身份验证。由于我们怀疑 Openresty 导致内存使用率过高,因此我们使用 提取了所有 lua 部分。auth_request现在我们有一个 nginx,它可以代理回 openresty 进行身份验证。

在主机和 SSL 证书数量相同的情况下,我们现在的内存使用量要低得多(每个工作器约 150MB,而不是 6GB)。此外,openresty 仅使用微不足道的内存。因此,openresty 与我们配置的其他部分结合似乎存在一些问题。

虽然这并没有完全回答原来的问题,但对于我们以及希望遇到此问题的任何人来说,这是一个有用的解决方法。

相关内容