हमारी श्रृंखला के पिछले हिस्सों में, हमने स्नैपस्टार्ट सक्षम किए बिना जावा 21 रनटाइम के साथ लैम्ब्डा फ़ंक्शन की कोल्ड स्टार्ट को मापा, स्नैपस्टार्ट सक्षम होने के साथ-साथ विभिन्न लैम्ब्डा मेमोरी सेटिंग्स, लैम्ब्डा परिनियोजन आर्टिफैक्ट आकार, जावा के साथ डायनेमोडीबी इनवोकेशन प्राइमिंग ऑप्टिमाइज़ेशन भी लागू किया। संकलन विकल्प, (ए)सिंक्रोनस HTTP क्लाइंट और विभिन्न लैम्ब्डा परतों का उपयोग। इन सभी मापों के लिए हमने डिफ़ॉल्ट कचरा संग्रहण एल्गोरिदम G1 का उपयोग किया।
इस लेख में हम जावा 21 रनटाइम के साथ लैम्ब्डा फ़ंक्शन के प्रदर्शन पर जावा कचरा संग्रहण एल्गोरिदम के प्रभाव का पता लगाना चाहेंगे। हम सभी कचरा संग्रहण एल्गोरिदम के लिए उपयोग में आने वाले समान छोटे जावा 21 संस्करण के साथ तुलनीय परिणाम प्राप्त करने के लिए G1 के लिए सब कुछ फिर से मापेंगे।
हमारे माप के लिए हम निम्नलिखित जावा संग्रह एल्गोरिदम का उपयोग उनकी डिफ़ॉल्ट सेटिंग के साथ करेंगे (कृपया प्रत्येक एल्गोरिदम के बारे में अधिक विस्तृत जानकारी के लिए लिंक किए गए दस्तावेज़ देखें):
हमारे प्रयोग में हम भाग 9 में प्रस्तुत थोड़े से संशोधित एप्लिकेशन का उपयोग करेंगे। आप एप्लिकेशन कोड यहां पा सकते हैं। मूल रूप से 2 लैम्ब्डा फ़ंक्शन हैं जो एपीआई गेटवे अनुरोधों का जवाब देते हैं और डायनेमोडीबी से एपीआई गेटवे से प्राप्त आईडी द्वारा उत्पाद पुनर्प्राप्त करते हैं। एक लैम्ब्डा फ़ंक्शन GetProductByIdWithPureJava21LambdaWithGCAlg का उपयोग SnapStart के साथ और उसके बिना किया जा सकता है और दूसरा GetProductByIdWithPureJava21LambdaAndPrimingWithGCAlg SnapStart और DynamoDB अनुरोध इनवोकेशन प्राइमिंग का उपयोग करता है।
नीचे दिए गए प्रयोग के परिणाम लगभग 1 घंटे तक चलने वाले प्रयोग के साथ 100 से अधिक ठंडी और लगभग 100,000 गर्म शुरुआतों के पुनरुत्पादन पर आधारित थे। इसके लिए (और मेरे पिछले लेख के प्रयोगों से) मैंने लोड टेस्ट टूल का उपयोग किया, लेकिन आप जो भी टूल चाहें, उसका उपयोग कर सकते हैं, जैसे सर्वरलेस-आर्टिलरी या पोस्टमैन। हम लैम्ब्डा फ़ंक्शंस को 1024 एमबी मेमोरी देकर और JAVA_TOOL_OPTIONS का उपयोग करके प्रयोग चलाते हैं: "-XX: TieredCompilation -XX:TieredStopAtLevel=1" (प्रोफाइलिंग के बिना जावा क्लाइंट संकलन) जिसमें ठंडे और गर्म प्रारंभ समय के बीच बहुत अच्छा तालमेल है।
दुर्भाग्य से मैं लैम्ब्डा फ़ंक्शन को ज़ेड गारबेज कलेक्टर (डिफ़ॉल्ट और जेनरेशनल दोनों के साथ) के साथ प्रारंभ नहीं कर सका, त्रुटि आई:
Failed to commit memory (Operation not permitted) [error][gc] Forced to lower max Java heap size from 872M(100%) to 0M(0%) [error][gc] Failed to allocate initial Java heap (512M) Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
इसने 1024 जैसे 2048 एमबी और इससे भी अधिक एमबी जैसी बड़ी मेमोरी सेटिंग की कोशिश की, लेकिन वही त्रुटि अभी भी दिखाई दी।
आइए अन्य 3 कचरा संग्रहण एल्गोरिदम के साथ हमारे माप के परिणामों को देखें।
संक्षिप्त नाम c ठंडी शुरुआत के लिए है और w गर्म शुरुआत के लिए है।
स्नैपस्टार्ट सक्षम किए बिना ठंडा (सी) और गर्म (डब्ल्यू) प्रारंभ समय:
जीसी एल्गोरिथम | सी पी50 | सी पी75 | सी पी90 | सी पी99 | c p99.9 | सी अधिकतम | w p50 | w p75 | w p90 | w p99 | w p99.9 | अधिकतम |
---|---|---|---|---|---|---|---|---|---|---|---|---|
जी1 | 3655.17 | 3725.25 | 3811.88 | 4019.25 | 4027.30 | 4027.83 | 5.46 | 6.10 | 7.10 | 16.79 | 48.06 | 1929.79 |
समानांतर कलेक्टर | 3714.10 | 3789.09 | 3857.87 | 3959.44 | 4075.89 | 4078.25 | 5.55 | 6.20 | 7.10 | 15.38 | 130.13 | 2017.92 |
शेनान्डाह | 3963.40 | 4019.25 | 4096.30 | 4221.00 | 4388.78 | 4390.76 | 5.82 | 6.45 | 7.39 | 17.06 | 71.02 | 2159.21 |
स्नैपस्टार्ट सक्षम होने पर एमएस में प्राइमिंग के बिना ठंडा (सी) और गर्म (डब्ल्यू) प्रारंभ समय:
जीसी एल्गोरिथम | सी पी50 | सी पी75 | सी पी90 | सी पी99 | c p99.9 | सी अधिकतम | w p50 | w p75 | w p90 | w p99 | w p99.9 | अधिकतम |
---|---|---|---|---|---|---|---|---|---|---|---|---|
जी1 | 1867.27 | 1935.68 | 2152.02 | 2416.57 | 2426.25 | 2427.35 | 5.47 | 6.11 | 7.05 | 17.41 | 51.24 | 1522.04 |
समानांतर कलेक्टर | 1990.62 | 2047.12 | 2202.07 | 2402.12 | 2418.99 | 2419.32 | 5.68 | 6.35 | 7.45 | 18.04 | 147.83 | 1577.21 |
शेनान्डाह | 2195.47 | 2301.07 | 2563.37 | 3004.89 | 3029.01 | 3030.36 | 5.73 | 6.41 | 7.51 | 17.97 | 75.00 | 1843.34 |
स्नैपस्टार्ट सक्षम होने पर और एमएस में डायनेमोडीबी इनवोकेशन प्राइमिंग के साथ ठंडा (सी) और गर्म (डब्ल्यू) प्रारंभ समय:
जीसी एल्गोरिथम | सी पी50 | सी पी75 | सी पी90 | सी पी99 | c p99.9 | सी अधिकतम | w p50 | w p75 | w p90 | w p99 | w p99.9 | अधिकतम |
---|---|---|---|---|---|---|---|---|---|---|---|---|
जी1 | 833.50 | 875.34 | 1089.53 | 1205.26 | 1269.56 | 1269.8 | 5.46 | 6.10 | 7.16 | 16.39 | 46.19 | 499.13 |
समानांतर कलेक्टर | 900.18 | 975.12 | 1058.41 | 1141.94 | 1253.17 | 1253.99 | 5.82 | 6.61 | 7.75 | 16.87 | 49.64 | 487.73 |
शेनान्डाह | 1065.84 | 1131.71 | 1331.96 | 1473.44 | 1553.59 | 1554.95 | 5.77 | 6.40 | 7.39 | 17.20 | 65.06 | 500.48 |
इस लेख में हमने जावा 21 रनटाइम के साथ लैम्ब्डा फ़ंक्शन के प्रदर्शन पर जावा कचरा संग्रहण एल्गोरिदम (जी1, पैरेलल कलेक्टर और शेनान्डाह) के प्रभाव का पता लगाया। हमने उन एल्गोरिदम के प्रदर्शन के बीच काफी अंतर देखा। G1 (डिफ़ॉल्ट एक) के साथ डिफ़ॉल्ट सेटिंग्स का उपयोग करके हम (कभी-कभी अब तक) सबसे कम ठंड और गर्म शुरुआत का अनुभव करते हैं। डायनेमोडीबी अनुरोध की प्राइमिंग के साथ स्नैपस्टार्ट का उपयोग करने से प्रदर्शन परिणाम अपेक्षित रूप से एक-दूसरे के काफी करीब आते हैं।
कृपया मिक्स और अधिकतम मेमोरी जैसी सेटिंग्स को ट्यून करने के लिए प्रत्येक कचरा संग्रहण एल्गोरिदम के दस्तावेज़ देखें जो प्रदर्शन में महत्वपूर्ण सुधार प्रदान कर सकता है और अपना माप स्वयं कर सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3