2009-09-08 7 views
8

हमारे आवेदन में ~ 10 धागे अलग-अलग कार्य कर रहे हैं (कोई थ्रेड पूल नहीं)। हम डेडलॉक का अनुभव नहीं कर रहे हैं, लेकिन हमेशा अनुरोध का जवाब देने के लिए विलंबता कम करने की कोशिश कर रहे हैं, इसलिए हम यह निर्धारित करने में रुचि रखते हैं कि कौन से ताले सबसे अधिक दिक्कत वाले हैं। jconsole दिखाता है कि कितनी बार धागे अवरुद्ध होते हैं, और यह अक्सर नहीं होता है, लेकिन हम अभी भी जानना चाहते हैं कि कौन से ताले सबसे अधिक दिक्कत वाले हैं।निर्धारित करना कि कौन से ताले सबसे अधिक दिक्कत वाले हैं?

हम सूर्य JVM का उपयोग कर चला रहे हैं, तो आईबीएम से JLA उपयोगी नहीं है, और हम सोलारिस पर चल रहा है तो हम dTrace उपयोग नहीं कर सकते नहीं कर रहे हैं।

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

+0

डीटी्रेस एकमात्र ऐसी प्रणाली है जिसे मैं व्यक्तिगत रूप से जानता हूं जो आप बिना किसी उपकरण के उपकरण के चाहते हैं। – aperkins

+0

इस बारे में और सोचकर, मुझे लगता है कि उपकरण सबसे अच्छा तरीका है। आप या तो व्यक्तिगत लॉक अनुरोध लॉग कर सकते हैं या वैश्विक काउंटर रख सकते हैं। –

उत्तर

7

YourKit जैसे अच्छे प्रोफाइलर प्राप्त करें। यह आपको बता सकता है कि उसमें निहित विशेष तरीकों और ऑब्जेक्ट मॉनीटर पर प्रतीक्षा और अवरोध कितना समय बिताया जाता है। उदाहरण के लिए:

alt text http://i25.tinypic.com/j8ocbm.jpg


उत्पादन मैट्रिक्स के बारे में अपनी टिप्पणी के संबंध में, आप काफी आप क्या इकट्ठा कर सकते हैं में सीमित कर रहे हैं। आपको जो जानकारी मिल रही है वह ThreadMXBean से है जो आपको सभी चल रहे धागे के बारे में मेटाडेटा दे सकती है। यह आपको किसी विशिष्ट ऑब्जेक्ट मॉनीटर की विवाद के बारे में जानकारी नहीं देगा।

मैं यहाँ मेरी हाथीदांत टॉवर पर प्राप्त नहीं करना चाहते हैं, लेकिन मैं वास्तव में महसूस हो रहा है आपका सर्वश्रेष्ठ दांव अपने उत्पादन वातावरण के रूप में संभव के रूप में करीब दोहराने के लिए प्रयास करने के लिए है। उस सेट को प्राप्त करने में कुछ समय व्यतीत करना अब भविष्य में कई बार लाभांश का भुगतान करेगा।

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

+0

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

+0

@Ted, मैं उस जानकारी को जोड़ने के लिए अपना प्रश्न संपादित करूंगा क्योंकि यह नाटकीय रूप से बदलता है जो आप कर सकते हैं और नहीं कर सकते हैं। – Kevin

+0

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

4

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

संपादित करें: एक विकसित प्रणाली के शीर्ष पर, AspectJ लॉग उत्पन्न करने का एक अच्छा विकल्प हो सकता है।

5

टेड, मैं अपनी स्थिति के साथ सहानुभूति है, लेकिन जब प्रदर्शन है कि महत्वपूर्ण है, मैं सलाह देते हैं कि आप गोली काटने और अनुकरण।

यह रूप में मुश्किल के रूप में आप का डर नहीं होना चाहिए: आपके आदान-प्रदान से संदेश प्रवाह उत्पन्न करने के लिए कोशिश कर के बजाय, क्यों भेजे प्रवाह रिकॉर्ड और यह अनुकरण पर वापस ही पुन: नहीं? प्रणाली आप का आकलन कर रहे प्रभावित करने वाले:

कुछ इस तरह के बिना, आप हमेशा हाइजेनबर्ग समस्या में चल रहा हो जा रहे हैं।

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