美好的一天。我们有一个用 C++ 编写的服务器,它接受许多 SSL/TLS 连接;我们正在使用 boost::asio(因此后端是 openssl)来建立 SSL。
目前服务器每个连接使用大约 160-200kbytes 的内存,我们希望减少这种使用。 boost::asio 默认使用 SSL_MODE_RELEASE_BUFFERS 标志,因此基本优化已经完成。使用 ctx->freelist_max_len
似乎没有任何改变。
如何做到这一点?也许我们还有一个额外的“ secret 设置”?也许我们可以安全地禁用一些加密算法以减少内存消耗?
最佳答案
当我查看同一件事时,我在连接了 1000 个客户端时使用 massif 分析了我的应用程序。
- 测试 1:不使用 SSL。内存使用峰值达到 2.871MB。
- 测试 2:使用 SSL,默认设置。峰值内存 617.3MB。
- 测试 3:禁用 SSL 压缩。峰值内存 41.93MB。
- 测试 4:修改后的测试 3 也启用了 SSL_MODE_RELEASE_BUFFERS。峰值内存为 11.49MB。
每个连接会降低到 11.5kB,当然这在您的应用程序中会有所不同。
您已经在使用 SSL_MODE_RELEASE_BUFFERS,但您也可以考虑禁用压缩。可以通过以下方式实现禁用压缩。它需要 openssl >= 1.0。
SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_COMPRESSION | <other options>);
或
SSL_set_options(ssl, SSL_OP_NO_COMPRESSION | <other options>);
关于c++ - openssl:减少内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18954918/