2010-01-28 10 views
20

क्या आपने प्रदर्शन आंकड़ों को एकत्रित करने और विश्लेषण करने के लिए अपने जावा एप्लिकेशन में Perf4J का उपयोग किया था?क्या आपने जावा ऐप में प्रदर्शन मीट्रिक एकत्र करने और विश्लेषण करने के लिए Perf4J का उपयोग किया है?

सामान्य पैटर्न (लॉग फाइल, उपयोगिताओं, यूआई, जेएमएक्स, आदि का उपयोग करके) क्या था?

क्या आपने एनोटेशन और एओपी-आधारित सुविधाओं का उपयोग किया था?

क्या आपने किसी भी जेएमएक्स एकीकरण का उपयोग किया था?

आपने उत्पादन कॉन्फ़िगरेशन को कैसे संभाला?

क्या आपने अपने आवेदन में एक विशेषता के रूप में प्रदर्शन आंकड़े दृश्य/रिपोर्ट शामिल की थी?

कृपया बताएं कि आपने वैकल्पिक लाइब्रेरी/दृष्टिकोण पर क्यों और क्यों निर्णय लिया है।

+0

Perf4J में आया है लेकिन कभी कोशिश नहीं की है इसलिए भी इसमें दिलचस्पी होगी। – Mark

उत्तर

11

मैं webservice एंडपॉइंट प्रदर्शन और आंतरिक सेवा और दाओ कक्षा प्रदर्शन की निगरानी के लिए Per4j का उपयोग कर रहा हूं।

मैं मुख्य रूप से कच्चे प्रदर्शन आंकड़ों को दैनिक रोलिंग फ़ाइल में लॉग करता हूं। फिर मैं अलग-अलग टाइमलाइसेस के साथ डेटा का विश्लेषण करने के लिए कमांड लाइन पर जार का उपयोग करता हूं। मैं अक्सर एक HTML फ़ाइल आउटपुट करने के लिए -g कमांडलाइन विकल्प का उपयोग करता हूं जिसे मैं खोल सकता हूं और डेटा को दृष्टि से देख सकता हूं जो वास्तव में उपयोगी है।

मुझे @Profiled एनोटेशन के साथ स्प्रिंग एओपी का उपयोग करने का आनंद मिलता है। यह समय बहुत साफ बनाता है। मेरे पास perf4j अपमानजनक प्रदर्शन के संबंध में कुछ संदेह थे, और मैं आसानी से पेशकश कर सकता था कि मैं अपने स्प्रिंग एप्लिकेशन Context.xml फ़ाइल से TimingAspect को हटाकर लॉगिंग बंद कर सकता हूं।

<!-- just remove and all uses of @Profiled do nothing --> 
<bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect"/> 

औसत मूल्य के बारे में समृद्ध और अधिकतम मूल्य को नोट करें। प्रदर्शन ट्यूनिंग करते समय, हमारे पास एक मानक मानक विचलन के साथ जंगली मूल्य वाले एक विधि कॉल था। अधिकांश मूल्य औसत के आसपास थे, हालांकि कॉल की एक छिड़काव औसत से 100x अधिक थी। किसी भी चीज़ से अधिक उपयोगकर्ता त्रुटि, लेकिन बाहर देखो।

मैं 15000 के टाइम्सलाइस के साथ AsyncCoalescingStatisticsAppender का उपयोग करता हूं, लेकिन शायद ही लॉग को पढ़ता हूं। चूंकि मेरे पास कच्चे प्रदर्शन लॉग हैं, इसलिए मैं कमांड लाइन पर perf4j चलाकर इसे काट और बदल सकता हूं।

मैंने जेएमएक्स एकीकरण की कोशिश की और यह दस्तावेज़ीकरण से वादा किया गया है। लेकिन इसके लिए इस समय मेरे पास कोई वास्तविक उपयोग नहीं है।

मेरे पास एसएनएमपी का उपयोग करके डेटा का खुलासा करने की योजना है और यदि यह उपयोगी है तो मैं योगदान दूंगा।

कुल मिलाकर, मैं Perf4j की अनुशंसा करता हूं।

3

मैंने पेर्फ 4 जे का उपयोग किया है, और अंत में इसे हटा दिया क्योंकि मैं पहले ही स्प्रिंग एओपी का उपयोग कर रहा था। मुझे बस दोनों को एकीकृत करना अच्छा लगेगा, लेकिन इसके साथ परेशानी हो रही थी (Perf4J परिशिष्टों की वजह से)।

मैंने जेएमएक्स के बिना एनोटेशन और एओपी के माध्यम से Perf4j का उपयोग करने की कोशिश की। आप विन्यास फाइलों के माध्यम से उत्पादन सीएफजी संभाल सकते हैं।

कुल मिलाकर, मुझे Perf4j दृष्टिकोण पसंद आया लेकिन चूंकि मैं पहले से ही प्रदर्शन निगरानी के लिए वसंत का उपयोग कर रहा था, मुझे perf4j की आवश्यकता नहीं थी। एक बात यह है कि Perf4j मुफ्त में देता है न्यूनतम/अधिकतम/मानक देव है; अन्य libs के साथ आप गणित खुद को करना होगा।

I चीज perf4j अच्छा है अगर आपके पास कोई अन्य lib नहीं है जो अवरोध (पहलू या एओपी) प्रदान कर सकता है, लेकिन चूंकि मेरे पास पहले से ही वसंत था, तो प्रदर्शन माप को कार्यान्वित करना आसान था। आप आसानी से वसंत के साथ जेएमएक्स के माध्यम से बीन गुणों का पर्दाफाश कर सकते हैं।

7

मैं समय-समय पर आरपीसी कॉल के लिए क्लाइंट-सर्वर एप्लिकेशन में Perf4J का उपयोग कर रहा हूं। इसे कार्यान्वित करना काफी आसान था: प्रत्येक आरपीसी विधि कॉल को मापने के लिए मुझे केवल आरपीसी प्रेषक सर्वलेट के चारों ओर कोड की कुछ पंक्तियां शामिल करने की आवश्यकता थी। समय माप एक अलग लॉग फ़ाइल में लिखा जाता है, ग्राफ़िंग सर्वलेट के साथ उपयोग के लिए समेकित डेटा स्मृति में रखा जाता है। विन्यास मिनटों का मामला था।

request.setAttribute("stopWatch", new CommonsLogStopWatch()); 

postHandle() विधि से यह कोड:

LoggingStopWatch stopWatch = (LoggingStopWatch)request.getAttribute("stopWatch"); 
stopWatch.stop(methodName); 

यहाँ मेरी log4j.cfg के प्रासंगिक अनुभाग हैं:

यह preHandle() विधि से एक अंश है

<logger name="org.perf4j.TimingLogger" additivity="false"> 
    <level value="info"/> 
    <appender-ref ref="CoalescingStatistics"/> 
    <appender-ref ref="statsAppender"/> 
</logger> 

<appender name="CoalescingStatistics" 
      class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender"> 
    <param name="TimeSlice" value="60000"/> 
    <appender-ref ref="graphPatientChart"/> 
</appender> 

<appender name="graphPatientChart" 
      class="org.perf4j.log4j.GraphingStatisticsAppender"> 
    <param name="GraphType" value="Mean"/> 
    <param name="TagNamesToGraph" value="getPatientChart,idleNotification"/> 
</appender> 

<appender name="statsAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="WEB-INF/log/meona-performance.log"/> 
    <param name="append" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%m%n"/> 
    </layout> 
</appender> 

मुझे ग्राफिंग सर्वलेट अधिक इंटरैक्टिव होना चाहिए: यह अच्छा होगा अगर मैं टैग चुन सकता हूं ग्राफ में शामिल किया जाना चाहिए। क्या आप एक यूआई एप्लीकेशन में आ गए हैं जिसका उपयोग समय माप लॉग का विश्लेषण करने के लिए किया जा सकता है?

+0

मैथियस, धन्यवाद। नहीं, मुझे अभी तक perf4j का उपयोग जारी रखने का मौका नहीं मिला है। – topchef

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