2013-09-23 50 views
6

Ngày tốt lành. Chúng tôi có một máy chủ được viết trên C++ chấp nhận nhiều kết nối SSL/TLS; chúng tôi đang sử dụng boost :: asio (để phụ trợ là openssl) để thiết lập SSL.openssl: giảm mức sử dụng bộ nhớ

Tại máy chủ lưu trữ đang sử dụng khoảng 160-200kbyte bộ nhớ cho mỗi kết nối và chúng tôi muốn giảm mức sử dụng này. boost :: asio đang sử dụng cờ SSL_MODE_RELEASE_BUFFERS theo mặc định, vì vậy tối ưu hóa cơ bản đã được thực hiện .. Chơi với ctx->freelist_max_len dường như không thay đổi gì cả.

Cách thực hiện việc này? Có lẽ chúng ta có một "thiết lập bí mật" bổ sung? Có lẽ chúng ta có thể vô hiệu hóa một cách an toàn một số thuật toán mã hóa để giảm consuption bộ nhớ?

+0

có bạn nhìn vào nơi bộ nhớ đang được phân bổ? Nó có thể là bất cứ điều gì, từ những gì bạn đã đưa ra. Ví dụ. thread trên không? – sehe

+0

@sehe theo ** massif ** ít nhất 50% bộ nhớ này được phân bổ bởi 'CRYPTO_malloc', vì vậy các kết nối không hoạt động đang chiếm nhiều bộ nhớ và cố gắng tối ưu hóa phần này bằng cách nào đó. Phần quan trọng của nó kể từ khi mỗi điểm thời gian 99% khách hàng đang chạy không tải. – PSIAlt

+1

Bạn có chắc chắn đó là kết nối không? Nó phải là phiên SSL, nếu OpenSSL hoạt động chính xác. Chúng không giống nhau. – EJP

Trả lời

7

Khi tôi nhìn vào cùng một điều, tôi đã lược tả ứng dụng của mình bằng khối lượng khi 1000 khách hàng được kết nối.

  • Kiểm tra 1: Không sử dụng SSL. Mức sử dụng bộ nhớ cao nhất đạt 2,871MB.
  • Kiểm tra 2: Với SSL, cài đặt mặc định. Bộ nhớ cao nhất là 617.3MB.
  • Kiểm tra 3: Đã tắt tính năng nén SSL. Bộ nhớ đỉnh 41,93MB.
  • Kiểm tra 4: Đã kiểm tra sửa đổi 3 với SSL_MODE_RELEASE_BUFFERS được bật. Bộ nhớ cao nhất là 11,49MB.

Điều đó sẽ giảm xuống còn 11,5kB mỗi kết nối, mặc dù điều này sẽ khác trong ứng dụng của bạn tất nhiên.

Bạn hiện đang sử dụng SSL_MODE_RELEASE_BUFFERS nhưng bạn cũng có thể xem xét tắt tính năng nén. Vô hiệu hóa nén có thể đạt được với bên dưới. Nó yêu cầu openssl> = 1.0.

SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_COMPRESSION | <other options>);

hoặc

SSL_set_options(ssl, SSL_OP_NO_COMPRESSION | <other options>);

Các vấn đề liên quan