2013-09-23 6 views
6

शुभ दिन। हमारे पास सी ++ पर एक सर्वर लिखा गया है जो कई एसएसएल/टीएलएस कनेक्शन स्वीकार करता है; हम एसएसओ स्थापित करने के लिए boost :: asio (इसलिए बैकएंड openssl) का उपयोग कर रहे हैं।openssl: स्मृति उपयोग को कम करने

यादगार सर्वर पर प्रति कनेक्शन लगभग 160-200 किलोबाइट मेमोरी का उपयोग कर रहा है और हम इस उपयोग को कम करना चाहते हैं। boost :: asio डिफ़ॉल्ट रूप से SSL_MODE_RELEASE_BUFFERS ध्वज का उपयोग कर रहा है, इसलिए मूल अनुकूलन पहले ही हो चुका है .. ctx->freelist_max_len के साथ खेलना कुछ भी नहीं लगता है।

यह कैसे किया जा सकता है? शायद हम एक अतिरिक्त "गुप्त सेटिंग" है? शायद हम मेमोरी कंसशन को कम करने के लिए कुछ एन्क्रिप्शन एल्गोरिदम सुरक्षित रूप से अक्षम कर सकते हैं?

+0

तुम कहाँ स्मृति आवंटित किया जा रहा है को देखा है? यह कुछ भी हो सकता है, जो आपने दिया है। जैसे थ्रेड ओवरहेड? – sehe

+0

@sehe ** massif ** के अनुसार ** इस स्मृति का कम से कम 50% 'CRYPTO_malloc' द्वारा आवंटित किया गया है, इसलिए निष्क्रिय कनेक्शन कई मेमोरी ले रहा है और मैं इस हिस्से को किसी भी तरह अनुकूलित करने की कोशिश कर रहा हूं। प्रत्येक टाइमपॉइंट 99% ग्राहकों के बाद से इसका महत्वपूर्ण हिस्सा निष्क्रिय है। – PSIAlt

+1

क्या आप वाकई प्रति कनेक्शन हैं? यह एसएसएल सत्र होना चाहिए, अगर ओपनएसएसएल सही तरीके से काम कर रहा है। वे एक ही बात नहीं हैं। – EJP

उत्तर

7

जब मैंने एक ही चीज़ को देखा, तो मैंने 1000 आवेदन किए जाने पर मासफ का उपयोग करके अपना आवेदन प्रोफाइल किया।

  • टेस्ट 1: एसएसएल का उपयोग किए बिना। पीक मेमोरी उपयोग 2.871 एमबी मारा।
  • टेस्ट 2: एसएसएल के साथ, डिफ़ॉल्ट सेटिंग्स। 617.3 एमबी की पीक मेमोरी।
  • टेस्ट 3: एसएसएल संपीड़न अक्षम के साथ। पीक मेमोरी 41.93 एमबी।
  • टेस्ट 4: SSL_MODE_RELEASE_BUFFERS के साथ संशोधित परीक्षण 3 भी सक्षम है। 11.4 9 एमबी की पीक मेमोरी।

यह प्रति कनेक्शन 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>);

संबंधित मुद्दे