दिलचस्प पोस्ट
सभी भागने के पात्र क्या हैं? सी ++ / सीएलआई मिश्रित मोड डीएलएल सृजन ऐप बंद होने पर पुश नोटिफिकेशन कैसे एक JVM टाइमज़ोन को ठीक से सेट करें CSS विशेषता चयनकर्ता: उद्धरण चिह्नों पर नियम (", 'या कोई नहीं?) जब एक UITableViewCell का चयन किया जाता है तो एक पुश सेगू बनाने के लिए यदि स्ट्रिंग्स को एनएटी में अपरिवर्तनीय है, तो सबस्ट्रिंग ओ (एन) समय क्यों लेते हैं? कैसे एक उदाहरण जावा आवेदन को लागू करने के लिए? कैसे सीरियल पोर्ट से पढ़ें और लिखें घोषणाओं के बारे में सर्पिल नियम – यह त्रुटि में कब है? एक HTML पृष्ठ पर एक UNC / नेटवर्क ड्राइव को जोड़ने JUnit4 में विशिष्ट क्रम में परीक्षा के तरीकों को कैसे चलाने के लिए? विस्तृत प्रकटीकरण के बाद टिप्पणी विवरण दबाए गए हैं? जावा-स्क्रिप्ट में एन-आकार के विभाजनों में बड़ी स्ट्रिंग विभाजित करें जब जावा स्ट्रिंग्स interned हैं?

यदि प्रोफाइलर का जवाब नहीं है, तो हमारे पास अन्य विकल्प क्या हैं?

प्रस्तुतीकरण "यहोशू ब्लाच" की प्रस्तुति "प्रदर्शन की चिंता" देखने के बाद, मैंने वह पेपर पढ़ा जो "जावा प्रो फाइर्स की सटीकता का मूल्यांकन" प्रस्तुतिकरण में सुझाई गई थी। इस निष्कर्ष का हवाला देते हुए:

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

कागज का निष्कर्ष यह है कि हम वास्तव में प्रोफेयर के परिणाम पर विश्वास नहीं कर सकते। लेकिन फिर, प्रोफेयरर्स का उपयोग करने का विकल्प क्या है क्या हमें वापस जाना चाहिए और बस अनुकूलन करने के लिए हमारी भावना का उपयोग करना चाहिए?

अद्यतन : चर्चा में याद किया जाने वाला एक बिंदु पर्यवेक्षक प्रभाव है क्या हम एक प्रोफाइलर का निर्माण कर सकते हैं जो वास्तव में ' पर्यवेक्षक प्रभाव ' मुक्त है?

वेब के समाधान से एकत्रित समाधान "यदि प्रोफाइलर का जवाब नहीं है, तो हमारे पास अन्य विकल्प क्या हैं?"

ओह, आदमी, कहां शुरू हो?

सबसे पहले, मुझे आश्चर्य है कि यह खबर है दूसरा, समस्या यह नहीं है कि प्रोफाइलर्स खराब हैं, यह है कि कुछ प्रोफेयर खराब हैं। लेखकों ने एक का निर्माण किया है, वे महसूस करते हैं, अच्छा है, कुछ गलतियों से बचने के द्वारा, जिनके मूल्यांकन वे मूल्यांकन में किए गए हैं। प्रदर्शन प्रोफाइलिंग के बारे में कुछ लगातार मिथकों के कारण गलतियां आम हैं

लेकिन हम सकारात्मक बनें अगर किसी को गति के लिए अवसर तलाशना है, तो यह वास्तव में बहुत सरल है:

  • नमूनाकरण कार्यक्रम की स्थिति से असंबद्ध होना चाहिए।
    इसका अर्थ है कि वास्तव में यादृच्छिक समय पर हो रहा है, भले ही कार्यक्रम I / O (उपयोगकर्ता इनपुट को छोड़कर), या जीसी में या तंग सीपीयू लूप में या जो कुछ भी हो

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

  • रिपोर्टिंग लाइन द्वारा प्रतिशत (फ़ंक्शन द्वारा नहीं) को दिखाना चाहिए।
    यदि "गर्म" फ़ंक्शन को पहचाना जाता है, तो उसे अभी भी समय के लिए "गर्म" कोड कोड की लाइनों के लिए शिकार करना पड़ता है। यह जानकारी नमूनों में है ! क्यों इसे छिपाना?

एक लगभग सार्वभौमिक गलती (जो कि कागज के शेयरों) को माप की सटीकता के साथ बहुत ज्यादा चिंतित होना है, और स्थान की सटीकता के साथ पर्याप्त नहीं है। उदाहरण के लिए, यहां पर प्रदर्शन ट्यूनिंग का एक उदाहरण है जिसमें प्रदर्शन समस्याओं की एक श्रृंखला की पहचान की गई और तय हो गई थी, जिसके परिणामस्वरूप 43 गुना वृद्धि हुई थी। यह तय करने से पहले प्रत्येक समस्या का सटीक रूप से पता होना जरूरी नहीं था, लेकिन इसका स्थान जानने के लिए प्रदर्शन ट्यूनिंग की एक घटना यह है कि समय को कम करके, एक समस्या को ठीक करना शेष समस्याओं के प्रतिशत को बढ़ा देता है, इसलिए उन्हें खोजने में आसान होता है जब तक कोई समस्या पाया जाता है और तय हो जाती है, प्रगति सभी समस्याओं को खोजने और तय करने के लक्ष्य की ओर की जाती है। उन्हें कम आकार के क्रम में ठीक करने के लिए आवश्यक नहीं है, लेकिन उनको इंगित करना आवश्यक है।

माप की सांख्यिकीय सटीकता के विषय पर, यदि कॉल बिंदु स्टैक पर कुछ समय एफ (जैसे 20%) है, और एन (जैसे 100) यादृच्छिक समय के नमूने ले जाते हैं, तो नमूने जो कॉल दिखाते हैं बिंदु एक द्विपद वितरण है, माध्य = एनएफ = 20, मानक विचलन = sqrt (एनएफ (1-एफ)) = sqrt (16) = 4. तो नमूनों का प्रतिशत जो 20% +/- 4% होगा । तो क्या यह सही है? वास्तव में नहीं, लेकिन क्या समस्या मिल गई है? ठीक।

वास्तव में, बड़ी समस्या यह है कि प्रतिशत के मामले में, इसे खोजने के लिए कम नमूने आवश्यक हैं। उदाहरण के लिए, यदि 3 नमूनों को लिया जाता है, और कॉल पॉइंट उन में से 2 पर दिखाई देता है, तो यह बेहद महंगा होने की संभावना है। (विशेष रूप से, यह बीटा वितरण का अनुसरण करता है। यदि आप 4 समान 0,1 यादृच्छिक संख्याएं उत्पन्न करते हैं, और उन्हें सॉर्ट करते हैं, तो 3 कॉल का वितरण उस कॉल पॉइंट के लिए लागत का वितरण है। इसका अर्थ है (2 + 1) / ( 3 + 2) = 0.6, ताकि अपेक्षाकृत बचत होती है, उन नमूनों को दिया जाता है।) सम्मिलित: और आपको मिले गति के कारक एक और वितरण, बीटाप्रैम द्वारा नियंत्रित होता है, और इसकी औसत 4 है। इसलिए यदि आप 3 नमूने लेते हैं, तो देखें उनमें से 2 पर समस्या, और उस समस्या को खत्म करने के लिए, औसतन आप इस कार्यक्रम को चार गुना तेज कर देंगे।

यह उच्च समय है कि हम प्रोग्रामर प्रोफाइलिंग के विषय पर हमारे सिर के बाहर काफ़ी उगल रहे थे।

अस्वीकरण – यह आलेख मेरे लेख का संदर्भ देने में विफल रहा है: डनलवी, "कॉल स्टैक नमूनाकरण से प्राप्त अनुदेश स्तर लागत के साथ प्रदर्शन ट्यूनिंग", एसीएम सिग्लैनल नोटिस 42, 8 (अगस्त 2007), पीपी 4-8।

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

कागज का निष्कर्ष यह है कि हम वास्तव में प्रोफेयर के परिणाम पर विश्वास नहीं कर सकते। लेकिन फिर, प्रोफेयरर्स का उपयोग करने का विकल्प क्या है

नहीं, कागज का समापन यह है कि वर्तमान प्रोफाइलर्स 'मापने के तरीके में विशिष्ट दोष हैं। वे एक तय प्रस्ताव का प्रस्ताव कागज काफी हाल ही में है मैं उम्मीद करूँगा कि प्रोफेयर इस फिक्स को अंततः लागू करने के लिए तब तक, एक दोषपूर्ण प्रोफाइलर अभी भी "महसूस" से बेहतर है

जब तक आप किनारे के किनारे के अनुप्रयोगों का निर्माण नहीं कर रहे हैं जो हर सीपीयू चक्र की आवश्यकता होती है तब मैंने पाया है कि प्रोबरियर्स आपके कोड के 10% धीमी भागों को ढूंढने का एक अच्छा तरीका है। एक डेवलपर के रूप में, मैं तर्क देता हूं कि आपको सभी मामलों में वास्तव में परवाह किए जाने चाहिए।

मेरे पास http://www.dynatrace.com/en/ के साथ अनुभव है और मैं आपको बता सकता हूं कि कम फांसी वाले फल को खोजने में यह बहुत अच्छा है

प्रोफेयर किसी भी अन्य उपकरण की तरह हैं और उनके पास अपनी क्विकर्स हैं, लेकिन मैं किसी भी दिन मानव पर उन पर भरोसा करूँगा ताकि आप अपने ऐप के हॉट स्पॉट को देख सकें।

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

आपका आवेदन सचमुच धीमा हो जाएगा, लेकिन कम से कम आपके पास प्रत्येक पद्धति को कितनी बार लागू किया जाएगा, इसकी एक सटीक गणना होगी। यदि आप यह भी देखना चाहते हैं कि प्रत्येक पद्धति को निष्पादित करने में कितना समय लगता है, तो प्रत्येक विधि perf4j के आसपास लपेटो।

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

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