2013-09-23 10 views
6

Dzień dobry. Mamy serwer napisany w C++, który akceptuje wiele połączeń SSL/TLS; używamy boost :: asio (więc backend to openssl), aby ustanowić SSL.openssl: zmniejszenie zużycia pamięci

Na serwerze mementu zużywa około 160-200 KB pamięci na połączenie i chcemy zmniejszyć to zużycie. boost :: asio używa domyślnie flagi SSL_MODE_RELEASE_BUFFERS, więc podstawowa optymalizacja jest już wykonana. Odtwarzanie z ctx->freelist_max_len wydaje się nic nie zmieniać.

Jak to zrobić? Może mamy dodatkowe "tajne ustawienie"? Prawdopodobnie możemy bezpiecznie wyłączyć niektóre algorytmy szyfrowania, aby zmniejszyć zużycie pamięci?

+0

masz spojrzał na którym pamięć jest alokowana? Może to być wszystko, od tego, co dałeś. Na przykład. wątek narzut? – sehe

+0

@sehe zgodnie z ** masywem ** co najmniej 50% tej pamięci jest alokowane przez 'CRYPTO_malloc', więc bezczynne połączenia zabierają dużo pamięci i próbuję jakoś zoptymalizować tę część. Jest to ważna część, ponieważ w każdym punkcie czasowym 99% klientów pracuje na biegu jałowym. – PSIAlt

+1

Czy jesteś pewien, że to połączenie? Powinna to być sesja SSL, jeśli OpenSSL działa poprawnie. To nie to samo. – EJP

Odpowiedz

7

Gdy patrzyłem na to samo, profilowałem moją aplikację za pomocą masy, gdy połączono 1000 klientów.

  • Test 1: Bez użycia SSL. Wykorzystanie pamięci szczytowej wyniosło 2,871 MB.
  • Test 2: Z SSL, ustawienia domyślne. Szczytowa pamięć wynosząca 617,3MB.
  • Test 3: Z wyłączoną kompresją SSL. Szczytowa pamięć 41.93MB.
  • Test 4: Zmodyfikowany test 3 z włączoną opcją SSL_MODE_RELEASE_BUFFERS. Szczytowa pamięć 11,49MB.

To obniża się do 11,5kB na połączenie, chociaż oczywiście będzie to miało inne zastosowanie.

Używasz już SSL_MODE_RELEASE_BUFFERS, ale możesz również rozważyć wyłączenie kompresji. Wyłączenie kompresji można osiągnąć za pomocą poniższego. Wymaga openssl> = 1.0.

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

lub

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

Powiązane problemy