openssl:减少内存使用量

美好的一天。 我们有一个用C ++编写的服务器,它接受许多SSL / TLS连接; 我们正在使用boost :: asio(所以后端是openssl )来建立SSL。

在服务器上,每个连接使用大约160-200k字节的内存,我们希望减少这种使用。 boost :: asio默认使用SSL_MODE_RELEASE_BUFFERS标志,因此基本优化已经完成。使用ctx->freelist_max_len似乎没有任何改变。

怎么做到这一点? 也许我们还有一个额外的“秘密设置”? 可能我们可以安全地禁用一些加密算法来减少内存消耗?

当我看同样的事情时,我在连接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 | );

要么

SSL_set_options(ssl, SSL_OP_NO_COMPRESSION | );