2013-09-23 37 views
6

İyi günler. Birçok SSL/TLS bağlantısını kabul eden C++ üzerinde yazılmış bir sunucumuz var; SSL kurmak için boost :: asio (yani backend openssl) kullanıyoruz.openssl: bellek kullanımını azaltma

Bağlantı sunucusunda bağlantı başına yaklaşık 160-200kbayt bellek kullanıyor ve bu kullanımı azaltmak istiyoruz. boost :: asio varsayılan olarak SSL_MODE_RELEASE_BUFFERS bayrağı kullanıyor, bu yüzden temel optimizasyon zaten yapıldı .. ctx->freelist_max_len ile oynamak hiçbir şey değiştirmiyor gibi görünüyor.

Bu nasıl yapılabilir? Belki de ek bir "gizli ayar" var mı? Muhtemelen bellek tüketimini azaltmak için bazı şifreleme algoritmalarını güvenle devre dışı bırakabiliriz?

+0

bellek tahsis ediliyor nerede baktı var? Verdiğiniz şeyden her şey olabilir. Örneğin. iş parçacığı mı? – sehe

+0

@sehe ** massif ** 'e göre bu belleğin en az% 50'si CRYPTO_malloc tarafından tahsis edilmiştir, bu nedenle boşta bağlantılar çok bellek alıyor ve bu parçayı bir şekilde optimize etmeye çalışıyor. Her zaman noktasında, müşterilerin% 99'u boşta olduğundan önemli kısmı. – PSIAlt

+1

Bağlantı başına olduğundan emin misiniz? OpenSSL düzgün çalışıyorsa, SSL oturumu başına olmalıdır. Aynı şey değiller. – EJP

cevap

7

Aynı şeylere baktığımda 1000 istemcim bağlandığında, massif kullanarak uygulamamı profillendirdim.

  • Test 1: SSL kullanmadan. Pik bellek kullanımı 2.871MB'ye ulaştı.
  • Test 2: SSL ile, varsayılan ayarlar. 617,3 MB pik bellek.
  • Test 3: SSL sıkıştırması devre dışı. Pik bellek 41.93MB.
  • Test 4: SSL_MODE_RELEASE_BUFFERS ile değiştirilmiş test 3 de etkinleştirildi. 11.49MB tepe belleği.

Bağlantı başına 11,5kB'ye düştüğünüzde, bu durum elbette uygulamanızda farklı olacaktır.

Zaten SSL_MODE_RELEASE_BUFFERS kullanıyorsunuz, ancak sıkıştırmayı da devre dışı bırakmayı düşünebilirsiniz. Sıkıştırma devre dışı bırakma, aşağıdaki ile elde edilebilir. Openssl> = 1.0 gerektirir.

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

veya

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

İlgili konular