जेफिरनेट लोगो

Amazon CodeGuru Profiler के साथ आवेदन प्रदर्शन का अनुकूलन

दिनांक:

अमेज़न कोडगुरु (पूर्वावलोकन) AWS फिर से शुरू की गई एक सेवा है: Invent 2019 जो आपके आवेदन की प्रदर्शन विशेषताओं का विश्लेषण करती है और सुधार करने के तरीकों पर स्वचालित सिफारिशें प्रदान करती है। यह आपके एप्लिकेशन के रनटाइम (कोडगुरु प्रोफाइलर के साथ) और स्वचालित रूप से स्रोत कोड परिवर्तनों (कोडगुरु समीक्षक के साथ) की समीक्षा करके करता है। अधिक जानकारी के लिए देखें Amazon CodeGuru Profiler क्या है?

यह पोस्ट एक उच्च-स्तरीय अवलोकन देता है कि कोडगुरु प्रोइलर कैसे काम करता है, इसका उपयोग करने के सामान्य तरीके और उत्पादन में आपके आवेदन के प्रदर्शन के बारे में आपकी समझ कैसे बेहतर हो सकती है। यह जेवीएम (जावा वर्चुअल मशीन) और संबंधित अवधारणाओं जैसे कि थ्रेड्स और कॉल स्टैक्स का एक बुनियादी ज्ञान मानता है।

CodeGuru Profiler का उपयोग क्यों करें?

CodeGuru Profiler आपके एप्लिकेशन के रनटाइम प्रदर्शन में निरंतर, हमेशा चलने वाले उत्पादन प्रोफाइल के साथ अंतर्दृष्टि प्रदान करता है। यह आपके एप्लिकेशन के रनटाइम से वर्तमान में चल रहे थ्रेड्स और उन थ्रेड्स को किस कोड को निष्पादित कर रहा है, से डेटा एकत्र करता है। CodeGuru Profiler आपको अपने आवेदन के निष्पादन और इसे अनुकूलित करने के तरीके के बारे में स्वचालित अनुशंसाओं को समझने में मदद करने के लिए विज़ुअलाइज़ेशन प्रदान करता है। ये सिफारिशें बुनियादी सुविधाओं की लागत को कम करने और अपने ग्राहकों को एक तड़क-भड़क अनुभव देने के लिए सीपीयू उपयोग और आवेदन विलंबता को कम करने पर केंद्रित हैं।

जब आप उन्हें बड़े बेड़े में लागू करते हैं, तो ये अनुकूलन महत्वपूर्ण लागत बचत कर सकते हैं। अमेज़ॅन के भीतर, कोडगुरु प्रोइलर 80,000 से अधिक अनुप्रयोगों में चल रहा है और इसके परिणामस्वरूप सुझाए गए अनुकूलन के साथ दसियों लाख डॉलर की बचत हुई है। इसका उपयोग लगातार संचालन के मुद्दों और प्रदर्शन पर उनके प्रभाव का विश्लेषण करने के लिए भी किया जाता है।

कोडगुरु प्रोफाइलर का अवलोकन

कोडगुरु प्रोफाइलर में तीन मुख्य घटक होते हैं:

  • एजेंट - आपके एप्लिकेशन के अंदर चलता है और इसकी वर्तमान रनटाइम स्थिति को प्रदूषित करता है और इस डेटा को CodeGuru Profiler को प्रस्तुत करता है
  • कंसोल - संभावित सुधारों के लिए आपके डेटा और सिफारिशों में विज़ुअलाइज़ेशन प्रदान करता है
  • API - प्रोफाइल के समूह और प्रोफाइल और सिफारिशों को पुनः प्राप्त करने वाले समूहों के प्रबंधन की अनुमति देता है

कोडगुरु प्रोइलर वर्तमान में जेवीएम अनुप्रयोगों (आप जावा, कोटलिन और स्काला को प्रोफाइल कर सकते हैं, लेकिन कोडगुरु दर्जी अपनी अधिकांश सिफारिशों को जावा में इस्तेमाल कर सकते हैं) के लिए डिज़ाइन किया गया एक एजेंट प्रदान करता है। जब आप अपने आवेदन में एजेंट शुरू करते हैं, तो एजेंट आपके आवेदन के बेड़े में सभी उदाहरणों पर आपके जेवीएम में एक नया धागा पैदा करता है। हर सेकंड (डिफ़ॉल्ट रूप से), एजेंट थ्रेड जागता है और जेवीएम से स्टैक-ट्रेस के लिए पूछता है कि जेवीएम में प्रत्येक थ्रेड (या थ्रेड का सबसेट) वर्तमान में क्या कर रहा है और प्रत्येक थ्रेड की वर्तमान स्थिति क्या है।

हर 5 मिनट (डिफ़ॉल्ट रूप से), एजेंट इस जानकारी का सारांश भेजता है (ए प्रोफाइल) कोडगुरु प्रोफाइलर बैकएंड सेवा के लिए। आपके सभी मेजबानों के प्रोफाइल 5 मिनट की अवधि में एक साथ एकत्रित होते हैं। आप व्यक्तिगत 5-मिनट की अवधि देख सकते हैं, लेकिन अक्सर 1-घंटे या 1-दिन की अवधि अधिक सटीक प्रोफाइल के लिए बेहतर होती है क्योंकि यह अधिक सांख्यिकीय-ध्वनि परिणाम प्रदान करता है। निम्न आरेख इस वर्कफ़्लो को दिखाता है।

आप कोडगुरु प्रोफाइलर के साथ अपने आवेदन से संबंधित प्रोफाइल की कल्पना कर सकते हैं। आपके आवेदन के प्रदर्शन की कल्पना करने के कई तरीके हैं; यह पोस्ट कुछ मूल बातों की समीक्षा करता है। कोडगुरु प्रोफाइलर विश्लेषक के चलने के बाद, कंसोल आपके एप्लिकेशन के प्रदर्शन को बेहतर बनाने के तरीकों पर सिफारिशों तक पहुंच प्रदान करता है। ये सिफारिशें जांच को प्राथमिकता देने में मदद करने के लिए संभावित अनुकूलन के आकार पर संदर्भ प्रदान करती हैं, और जांचे गए मुद्दे के प्रदर्शन प्रभाव को कम करने या हटाने के लिए आजमाए गए और परीक्षण किए गए कदम देती हैं।

कोडगुरु प्रोफाइलर की तैनाती

अपने आवेदन के व्यवहार का एक यथार्थवादी दृष्टिकोण प्राप्त करने के लिए उत्पादन (वास्तविक ग्राहक) यातायात के साथ एक वातावरण में कोडगुरु प्रोफाइलर को चलाने की सिफारिश की जाती है। उत्पादन में परिवर्तन जारी करने से पहले किसी भी प्रदर्शन परिवर्तन के लिए परीक्षण करने के लिए इसे पूर्व-उत्पादन परिवेश में चलाने के लिए भी उपयोगी हो सकता है। प्रोफाइलिंग प्रोडक्शन सॉफ्टवेयर यह सुनिश्चित करने का सबसे अच्छा तरीका है कि आप समय का अनुकूलन करते हुए वास्तव में वास्तविक दुनिया की दक्षता में महत्वपूर्ण सुधार लाएं।

आपकी सेवा पर प्रभाव के संदर्भ में, कोडगुरु प्रोफाइलर एजेंट आमतौर पर अनुप्रयोगों में 1% से कम सीपीयू उपयोग ओवरहेड जोड़ता है और अधिकतम 100 एमबी मेमोरी का उपयोग करता है। जब आप CodeGuru Profiler एजेंट जोड़ते हैं तो आपको अपनी सामान्य QA या रिलीज़ प्रक्रिया से चलना चाहिए। इससे आपको सही तरीके से प्रस्तुत किए जा रहे डेटा को जांचने का मौका मिल सकता है, और इससे आपके एप्लिकेशन के प्रमुख मैट्रिक्स पर कोई प्रभाव नहीं पड़ता है।

प्रोफाइलिंग समूहों में अपने अनुप्रयोगों का आयोजन

प्रोफाइलिंग समूह कोडगुरु प्रोइलर का एक एकल प्रोफ़ाइल में आपके आवेदन के कई उदाहरणों को एक साथ समूहीकृत करने का तरीका है। इसका सबसे आम उपयोग मामला एक ही बेड़े में कई मेजबानों से प्रोफाइल को मर्ज करना है जो सभी एक ही एप्लिकेशन को चलाते हैं।

एक प्रोफाइलिंग समूह आमतौर पर एक एप्लिकेशन का प्रतिनिधित्व करता है, हालांकि आप किसी एप्लिकेशन को कैसे परिभाषित करते हैं यह ज्यादातर एक शैलीगत निर्णय है। एक ही एप्लिकेशन (और इसलिए एकल प्रोफाइलिंग समूह) के रूप में कई संबंधित एपीआई को प्रोफाइल करना आम है, हालांकि अगर एपीआई पूरी तरह से असंबंधित हैं, तो आप अलग-अलग प्रोफाइलिंग समूहों में अलग करके स्पष्ट और अधिक पठनीय प्रोफाइल के साथ समाप्त हो सकते हैं।

निम्नलिखित आपके प्रोफाइलिंग समूहों के लिए अनुसरण करने के लिए एक सुझाया गया पैटर्न है:

  • प्रत्येक एप्लिकेशन के लिए अलग-अलग प्रोफाइलिंग समूहों का उपयोग करें। यदि आपके पास अलग-अलग उद्देश्यों के लिए अलग-अलग अनुप्रयोग हैं, तो संभवत: उन्हें प्रोफाइलिंग समूह को साझा नहीं करना चाहिए क्योंकि इससे आपके विज़ुअलाइज़ेशन की स्पष्टता कम हो सकती है।
  • किसी एप्लिकेशन के प्रत्येक क्षेत्र के लिए अलग-अलग प्रोफाइलिंग समूहों का उपयोग करें। यह आपको क्षेत्रों के व्यवहार की तुलना करने की अनुमति देता है, जो आपके आवेदन के विशेष क्षेत्रों को प्रभावित करने वाले परिचालन मुद्दों के निदान के लिए उपयोगी हो सकता है।
  • किसी एप्लिकेशन के प्रत्येक चरण के लिए अलग-अलग प्रोफाइलिंग समूहों का उपयोग करें। परीक्षण और मचान के वातावरण को आपके उत्पादन सेवा के रूप में उसी प्रोफाइलिंग समूह में प्रोफाइल जमा नहीं करना चाहिए। अधिकांश सिंथेटिक परीक्षण वातावरण उत्पादन वातावरण (डेटा और कोड दोनों के संदर्भ में) का पूरी तरह से अनुकरण नहीं करते हैं और इसलिए अलग-अलग प्रदर्शन विशेषताएं हैं।

ये सिफारिशें प्रोफाइल समूह के नामों की ओर ले जाती हैं, जो दिखते हैं -उत्तर-पश्चिम-१-बीटा और -US पश्चिम-2-prod।

कोडगुरु प्रोफाइलर के साथ शुरुआत करना

निम्न उदाहरण दर्शाता है कि आप CodeGuru Profiler के साथ एक आवेदन ऑनबोर्डिंग से क्या उम्मीद कर सकते हैं, और विज़ुअलाइज़ेशन और सिफारिशें जो आप इसे से बाहर निकलते हैं। अधिक जानकारी के लिए देखें Amazon CodeGuru Profiler की स्थापना। प्रक्रिया में निम्नलिखित चरण शामिल हैं:

  1. एक प्रोफाइलिंग ग्रुप बनाएं। आप इसे कोडगुरु प्रोफाइलर कंसोल के माध्यम से आसानी से कर सकते हैं।
  2. CodeGuru को सबमिट करने के लिए अपने आवेदन IAM की अनुमति दें। आपके आवेदन में प्रोफाइल जमा करने और एजेंट को कॉन्फ़िगर करने के लिए IAM की अनुमति होनी चाहिए। निम्नलिखित उदाहरण कोड ये अनुमति देता है; आपको केवल क्षेत्र, खाता आईडी और प्रोफाइलिंग समूह का नाम जोड़ना होगा:
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeguru-profiler:ConfigureAgent", "codeguru-profiler:PostAgentP
    rofile" ], "Resource": "arn:aws:codeguru-profiler:<region>:<accountID>:profilingGroup/<profilingGroupName>" } ]
    }

  3. एजेंट को एक के रूप में जोड़ें आपके आवेदन पर निर्भरता। यदि आपका आवेदन मावेन या ग्रैडल का उपयोग करता है, तो प्रलेखन में दिए गए निर्देशों का पालन करें। अन्यथा, आपको एजेंट JAR को अपनी निर्माण प्रणाली में मैन्युअल रूप से आयात करने की आवश्यकता हो सकती है।
  4. जब आपका आवेदन शुरू हो जाए तो प्रोफाइलर शुरू करें। अपने एप्लिकेशन के स्टार्टअप में कोड की कुछ पंक्तियां जोड़ें कि कौन सा प्रोफ़ाइल समूह सबमिट करने के लिए कौन सा प्रोफ़ाइल समूह और क्षेत्र को कॉन्फ़िगर करें और आपके द्वारा पहले कॉन्फ़िगर की गई भूमिका को मानने के लिए किसी भी क्रेडेंशियल की आवश्यकता है। निम्न उदाहरण कोड दिखाता है कि यह कैसा दिख सकता है (कोडगुरु पूर्वावलोकन में है, ये एपीआई परिवर्तन के अधीन हैं):
    import software.amazon.codeguruprofilerjavaagent.Profiler;
    import software.amazon.awssdk.regions.Region; public class MyService { public static void main(String[] args) { // Start CodeGuru Profiler using default AWS credentials from the environment new Profiler.Builder() .profilingGroupName("my-profiling-group") .awsRegionToReportTo(Region.EU_WEST_1) // If your application runs in a different region from your profiling group .build().start(); // ... continue starting up my service }
    }

आपके द्वारा अपने नए ऑनबोर्ड किए गए एप्लिकेशन को तैनात करने के बाद, प्रोफाइल को 5 मिनट की प्रोफाइलिंग के बाद सबमिट किया जाता है। आपके सभी मेजबानों से प्रोफाइल को एकत्रित करने में 15 मिनट तक का समय लग सकता है, जिसके बाद आप कोडगुरु बायलर कंसोल में अपना पहला दृश्य देख सकते हैं। पहले विज़ुअलाइज़ेशन की ग्रैन्युलैरिटी इस बात पर निर्भर करती है कि प्रोफाइलिंग के पहले 5 मिनट के दौरान आपका एप्लिकेशन कितना सक्रिय था — एक ऐसा एप्लिकेशन जो अधिकतर समय बेकार रहता है, डिफ़ॉल्ट विज़ुअलाइज़ेशन में प्लॉट करने के लिए कई डेटा पॉइंट नहीं होते हैं। हालाँकि, आप यह देख सकते हैं कि आप व्यापक डेटा की अवधि को देख सकते हैं, उदाहरण के लिए, एक दिन या एक सप्ताह तक यदि आपके आवेदन में बहुत कम CPU उपयोग हो।

आपकी पहली अनुशंसा रिपोर्ट बनाने में 24 घंटे तक का समय लगता है। आपके द्वारा विश्लेषण किए गए प्रोफाइल डेटा की मात्रा के साथ सिफारिश की सटीकता बढ़ जाती है। इस अवधि के दौरान अपने आवेदन को लगातार जारी रखने की सिफारिश की जाती है (और बाद में यदि आप अद्यतन सिफारिशें प्राप्त करना चाहते हैं)।

आपकी रिपोर्ट किसी भी संभावित अनुकूलन पर प्रकाश डालती है जिसे कोडगुरु प्रोइलर ने पहचाना है और अनुशंसित परिवर्तनों को कैसे पूरा किया जाए, इस पर कदम उठाए हैं। यदि आपकी रिपोर्ट में कोई अनुशंसाएँ नहीं हैं, तो आपके आवेदन में कोई भी प्रदर्शन समस्याएँ नहीं हैं जिन्हें CodeGuru Profiler ने मान्यता दी है। हालाँकि, यह भविष्य में वापस जाँचने योग्य है क्योंकि कोडगुरु प्रोइलर नए मुद्दों को पहचानना सीखता है और समय के साथ आपका आवेदन बदलता है।

कोडगुरु प्रोफाइलर के विज़ुअलाइज़ेशन को समझना

अब मैं एक उदाहरण के माध्यम से जाऊंगा कि मैं अपने आवेदन को अनुकूलित करने के लिए कोडगुरु प्रोइलर का उपयोग कैसे कर सकता हूं। कोडगुरु प्रोफाइलर के लिए अपने आवेदन को ऑन करने के बाद, मुझे अपने आवेदन के रनटाइम प्रदर्शन में अपनी पहली झलक मिलती है। इस प्रकार के विज़ुअलाइज़ेशन को अक्सर ए कहा जाता है लौ ग्राफ, और यह लॉग और मैट्रिक्स के पूरक के रूप में एक बहुत शक्तिशाली उपकरण हो सकता है।

फ्लेम ग्राफ को अप्रोच करने का सबसे आसान तरीका कुछ ऐसे फ्रेम हैं जिनसे आप परिचित हैं - अक्सर आपके आवेदन का प्रवेश बिंदु शुरू करने के लिए एक अच्छी जगह है। इस पोस्ट के लिए, Main (पूर्ववर्ती स्क्रीनशॉट पर 1) मेरे आवेदन का प्रारंभिक बिंदु है, और ImageProcessor (मेन के ठीक ऊपर) वह वर्ग है जिसमें अधिकांश व्यावसायिक तर्क होते हैं।

दृश्य में खुदाई, के उल्लेख हैं अमेज़न SQS ग्राफ के बीच में (2)। उस के दाईं ओर, आप कुछ समय वस्तुओं को क्रमबद्ध करने में बिता सकते हैं (3), कुछ लॉगिंग (4), और फिर दाहिने किनारे (5) के पास कुछ इमेज-प्रोसेसिंग फ्रेम। बहुत नीचे बाईं ओर, कुछ कचरा संग्रह फ़्रेम (6) हैं। कुल मिलाकर, यह समझ में आता है क्योंकि मेरे आवेदन का उपयोग करता है अमेज़न S3 और अमेज़न SQS जावा क्लाइंट, और कुछ इमेज प्रोसेसिंग लाइब्रेरी भी।

फ्लेम ग्राफ के साथ प्रभावी ढंग से काम करने के लिए, आपको उन्हें पढ़ने के तरीके की मूल बातें समझने की जरूरत है। प्रत्येक आयत एक है ढांचा, जो कॉल स्टैक में किसी विशेष स्थान पर एक विधि कॉल का प्रतिनिधित्व करता है। ऊपर दिए गए फ्रेम सीधे इस फ्रेम द्वारा बुलाए गए तरीकों से मेल खाते हैं (कभी-कभी इसे कहा जाता है बछड़ा), और नीचे दिए गए फ्रेम इस फ्रेम को क्या कहते हैं (कॉल)। उदाहरण के लिए, के लिए AwsSyncClientBuilder.build फ्रेम (2), आप देख सकते हैं कि यह कहा जाता है Main.sqsClient (फ्रेम 2 से नीचे), और यह केवल कॉल करता है AmazonSyncClientBuilder.build (फ्रेम 2 से ऊपर)। यह आपको पूरे एप्लिकेशन में कॉलों के पदानुक्रम को एक साथ जोड़ देता है।

प्रत्येक फ्रेम की चौड़ाई उपयोग किए गए सीपीयू समय के प्रतिशत से मेल खाती है: चौड़ी फ्रेम, उस पद्धति को निष्पादित करने में अधिक समय और इसे कॉल करने के तरीकों को। ज्योति ग्राफ को नेविगेट करते समय, यह अक्सर सबसे पहले चौड़े फ्रेम को देखने लायक होता है और यह सुनिश्चित करता है कि आप समझें कि वे फ्रेम आपके CPU के अधिकांश समय को क्यों ले रहे हैं।

जब एजेंट एक जेवीएम धागे का नमूना लेता है, तो धागा कई में से एक हो सकता है धागा बताता है। कोडगुरु Profiler निम्नलिखित राज्यों में इनका मानचित्र बनाता है:

  • runnable - जब यह सैंपल लिया गया तो थ्रेड निष्पादित हो रहा था। इसका मतलब है कि यह या तो चलाया जा रहा था या चलाया जाना तय था।
  • अवरोधित - थ्रेड जावा सिंक्रनाइज़ किए गए ब्लॉक में प्रवेश करने या मॉनिटर की प्रतीक्षा कर रहा था, लेकिन एक अन्य थ्रेड वर्तमान में इसे निष्पादित या पकड़ रहा था और इस थ्रेड को निष्पादित करने से रोकता था।
  • इंतज़ार कर रही - धागा दूसरे धागे से संकेत की प्रतीक्षा कर रहा था। नेटवर्क अनुरोध, डिस्क I / O, और के साथ काम करते समय यह एक बहुत ही सामान्य थ्रेड स्थिति है notify() और notifyAll() कहता है।
  • वेटिंग वेटिंग - के समान Waiting, इस अपवाद के साथ कि प्रतीक्षा में एक टाइमआउट है, उदाहरण के लिए, टाइमआउट के साथ सो रहा है।
  • निष्क्रिय - धागे का सीपीयू या विलंबता पर कोई प्रभाव नहीं पड़ा। उदाहरण के लिए, नए अनुरोधों की प्रतीक्षा में एक थ्रेड पूल।
  • नेटिव - जब यह जावा नेटिव इंटरफ़ेस (JNI) के माध्यम से मूल कोड को निष्पादित कर रहा था, तो थ्रेड का नमूना लिया गया था। कोडगुरु प्रोफाइलर कुछ ज्ञात देशी फ़्रेमों को दूसरे थ्रेड राज्यों में मैप करता है जहां यह जानता है कि फ़्रेम क्या कर रहा है, लेकिन यदि फ्रेम मूल राज्य में छोड़ दिए जाते हैं, तो इसका मतलब है कि आपको इस बारे में कोई जानकारी नहीं है कि थ्रेड चल रहा था या प्रतीक्षा कर रहा था।

थ्रेड स्टेट्स के बारे में अधिक जानकारी के लिए, देखें थ्रेड स्टेट प्राप्त करें JVM टूल इंटरफ़ेस वेबसाइट में।

एक और उपयोगी अवधारणा है दीवार घड़ी का समय और सीपीयू समय। वॉल क्लॉक टाइम से तात्पर्य कोड को निष्पादित करते समय (या किसी चीज़ का इंतजार) करते हुए वास्तविक दुनिया का समय कितना हो गया है। इसके विपरीत, सीपीयू समय दर्शाता है कि एक ऑपरेशन को पूरा करने में कितने सीपीयू चक्र लगे। वॉल क्लॉक टाइम में नेटवर्क, डिस्क I / O, और अन्य थ्रेड को समाप्त करने के लिए प्रतीक्षा समय शामिल है। इन दोनों के बीच का अंतर विशेष रूप से अनुरोध / प्रतिक्रिया-शैली के अनुप्रयोगों में महत्वपूर्ण है जहां आप विलंबता को कम करना चाहते हैं।

इस डिफ़ॉल्ट विज़ुअलाइज़ेशन को सीपीयू मोड कहा जाता है। यह केवल उन फ़्रेमों से जानकारी दिखाता है जो अंदर थे Runnable, Blocked, तथा Native थ्रेड स्टेट्स, और इन तीन राज्यों के बीच अंतर नहीं करता है। वे एक अच्छा विचार देते हैं कि आपके मेजबानों का सीपीयू क्या करने में व्यस्त था, जो कि सीपीयू के उपयोग को कम करने के लिए उपयोगी है, शायद आपके बेड़े को डाउन करने के अंतिम लक्ष्य के साथ।

आप लेटेंसी मोड में बदलकर कुछ अन्य थ्रेड स्टेट्स देख सकते हैं। इसमें सभी थ्रेड राज्यों को छोड़कर शामिल है Idle, और आप इसका उपयोग एक अच्छा विचार प्राप्त करने के लिए कर सकते हैं कि आवेदन की दीवार घड़ी के समय पर क्या प्रभाव पड़ रहा है। निम्न स्क्रीनशॉट लटेंसी मोड में फ्लेम ग्राफ का है, जिसमें अब नेटवर्क और डिस्क I / O शामिल हैं। इस मामले में, एप्लिकेशन अभी भी अपना अधिकांश समय इसमें बिताता है ImageProcessor.extractTasks (दूसरी निचली पंक्ति) और लगभग हर समय उसी के अंदर है Runnable, जिसका मतलब है कि यह किसी भी चीज का इंतजार नहीं कर रहा था।

अनुशंसा रिपोर्ट और अनुकूलन

पूर्ववर्ती स्क्रीनशॉट शीर्ष (1) पर एक बटन दिखाता है, जो बताता है कि CodeGuru Profiler के पास चार सिफारिशें हैं। जब आप चुनते हैं अनुशंसाएँ, आप इस प्रोफ़ाइल के लिए अनुशंसा रिपोर्ट देखेंगे। निम्न स्क्रीनशॉट मेरे द्वारा दिखाए जा रहे एप्लिकेशन के लिए अनुशंसाओं में से एक दिखाता है। यह जिन चीजों पर प्रकाश डालता है उनमें से एक यह है कि एप्लिकेशन ने अपने CPU समय का 18.57% नए AWS SDK क्लाइंट बनाने में खर्च किया। CodeGuru Profiler का कहना है कि यह अपेक्षा करता है कि यह अधिकांश अनुप्रयोगों में CPU समय के 1% से कम हो, और आप
जितना संभव हो सके ग्राहकों का पुन: उपयोग करें।

इस उपयोग के मामले में, SDK क्लाइंट का पुन: उपयोग नहीं करने का कोई अच्छा कारण नहीं है। इसलिए, मैंने अनुरोधों के बीच अमेज़न SQS क्लाइंट को कैश करने के लिए एक बदलाव किया और इस बदलाव को तैनात किया। निम्न स्क्रीनशॉट लेटेंसी मोड में अपडेट की गई प्रोफ़ाइल दिखाता है। बहुत कम प्रोफ़ाइल में है Runnable राज्य और अधिक में है Waiting राज्य, जिसका अर्थ है कि प्रोफ़ाइल का एक बड़ा प्रतिशत नेटवर्क संचालन करने में खर्च किया जाता है, और (सीपीयू) बेकार सीपीयू संचालन पर बहुत कम। तुलना के लिए, नीचे दिए गए स्क्रीनशॉट में मैंने ओवर होवर किया है ImageProcessor.extractTasks फ्रेम जो सबसे अधिक था Runnable पिछली लौ ग्राफ में समय। यह अब कुल प्रोफाइल समय का 0.62% है, जो 14.70% से नीचे है, जो एक उत्कृष्ट सुधार है।

इस अनुकूलन के परिणामस्वरूप, प्रत्येक अनुरोध पर एप्लिकेशन की विलंबता कम हो गई, जिससे मेरे ग्राहक खुश हो गए। मैं इस एप्लिकेशन को चलाने वाले होस्ट पर CPU कोर की संख्या भी कम कर सकता था, जो मेरी टीम को कुछ पैसे बचाता है। यदि मैं अनुकूलन जारी रखना चाहता था, तो मैं सोच सकता हूं कि अनुरोधों को समानांतर करके नेटवर्क थ्रूपुट को कैसे बढ़ाया जाए, या यदि संभव हो तो उन्हें कैशिंग भी किया जाए।

निष्कर्ष

इस पोस्ट ने कोडगुरू प्रोइलर की सतह के नीचे-स्तर की अवधारणाओं को समझाया। यह इस बात पर निर्भर करता है कि एजेंट क्या करता है, क्यों उत्पादन में प्रोफाइलिंग अधिकांश अनुप्रयोगों के लिए एक अच्छा विचार है, और अपने रूपरेखा समूहों को कैसे स्थापित किया जाए। यह एक संक्षिप्त उदाहरण के माध्यम से भी गया कि कैसे एक लौ ग्राफ की व्याख्या करें और अनुकूलन के लिए सिफारिशों का उपयोग करें।

भविष्य में JVM एजेंट में गहरे गोता लगाने, लौ ग्राफ विज़ुअलाइज़ेशन में अधिक विस्तृत नज़र रखने और विभिन्न प्रकार के अनुप्रयोगों का अनुकूलन करने के लिए कोडगुरु प्रॉइलर का उपयोग कैसे करें जैसे विषयों को कवर करने के लिए भविष्य में वापस जांचें।

आप CodeGuru Profiler के साथ जाकर आरंभ कर सकते हैं कोडगुरु सांत्वना.


लेखक के बारे में

इसहाक जॉर्डन लंदन में अमेज़ॅन कोडगुरु प्रोफाइलर टीम में एक सॉफ्टवेयर डेवलपमेंट इंजीनियर है। वह पहले अमेज़ॅन विज्ञापन के लिए एक एसडीई था, और ग्राहक के दृष्टिकोण से अमेज़ॅन उत्पादों के बारे में सोचना पसंद करता है।

स्रोत: https://aws.amazon.com/blogs/machine-learning/optimizing-application-performance-with-amazon-codeguru-profiler/

स्पॉट_आईएमजी

नवीनतम खुफिया

स्पॉट_आईएमजी