我使用的是节点版本v0.8.16。它与openssl 1.0.0f捆绑在一起,包含SSL_OP_NO_COMPRESSION
和SSL_MODE_RELEASE_BUFFERS
。
我的测试ssl服务器只是在传入https请求时回显hello world并保持连接打开。从我的测试来看,每个ssl连接的内存开销大约是150k。
节点中ssl连接的内存开销是多少?在这种情况下,我如何减少ssl内存使用?
SSL需要每个连接的空间
- socket FD
- 为最大可能的SSL记录提供大约16k的接收缓冲区,这与密码套件略有不同
- 一个输出缓冲区,大概也是16k
- 空间计算 中的每消息mac
- 握手状态、连接状态、握手MAC等
- 指向SSL会话的指针,该会话可在指向同一目标的连接之间共享,并且必须包含密码套件、协议、预主秘钥、共享秘钥、会话ID、对等证书链、超时变量等。
- 还有其他我没想到的。
此外,TCP连接将消耗内核空间,例如套接字发送和接收缓冲区
SSL每个连接需要大约128K甚至更多的内存缓冲区(取决于实现),因此您可能无法减少内存使用量。