2010-11-12 12 views
5

मेरे पास एक बहु-थ्रेडेड एप्लिकेशन है जो शुरू करने के लिए अच्छी तरह से स्केल करता है, लेकिन 16-सीपीयू सर्वर पर चल रहा है, एक बार जब मैं 5 या 6 हार्डवेयर थ्रेड प्रदर्शन स्तर से अधिक हो जाता हूं। मैं संदिग्ध कि बाधा सिंक्रनाइज़ विधियों में से एक को घेरती है। हालांकि, मुझे यह सुनिश्चित करने की ज़रूरत है कि कोड में डाइविंग शुरू करने से पहले और गैर-अवरुद्ध वाले एल्गोरिदम को प्रतिस्थापित करने का प्रयास करने से पहले यह दोषी विधि है।प्रोफाइलिंग जावा: पता लगाएं कि थ्रेड समय अवरुद्ध समय

-Xprof तर्क के साथ जावा चलाना मुझे बताता है कि, जैसा कि मैंने उम्मीद की थी, धागे अपना अधिकांश समय अवरुद्ध कर रहे हैं। क्या कोई तरीका है कि मैं इसे तोड़ सकता हूं कि को किसी विशेष विधि पर अवरुद्ध करने में कितना समय लगता है?

उत्तर

1

http://yourkit.com मॉनीटर व्यू आपको बताएगा कि कौन से लॉक क्लासेस गर्म हैं, जो लॉक इंस्टेंस और कॉलर स्टैक द्वारा दंडित ताले और ब्रेकडाउन धारण कर रहे हैं। उपकरण की 30 दिन की मूल्यांकन अवधि है।

1

जेडीके के साथ आता है जो jvisualvm उपकरण आपको थोड़ा सा मदद कर सकता है, हालांकि इसकी सीपीयू प्रोफाइलिंग जानकारी सीमित है (Xprof डेटा के लिए एक विज़ुअलाइज़र)। मुझे आमतौर पर स्मृति प्रोफाइलिंग के लिए यह अधिक उपयोगी लगता है।

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

या, आप अपने कोड में आंकड़े एकत्रण जोड़ सकते हैं (उदाहरण के लिए, यह समझने के लिए कि आपके द्वारा संदिग्ध प्रत्येक सिंक्रनाइज़ विधि को निष्पादित करने में कितना समय लगता है, इसे विधि में निष्पादित करने के लिए समय/समय पर प्रतीक्षा करना), हालांकि यह बहुत अधिक है काम।

1

क्या आप this method आजमा सकते हैं? यदि यह एकाधिक CPUs में काम करता है तो उसे समस्या मिलनी चाहिए, लेकिन यह एक बड़ा "अगर" है।

असल में, जब आप देखते हैं कि थ्रेड अवरुद्ध है, तो कॉल स्टैक आपको बिल्कुल बताता है क्यों। यदि आप सुनिश्चित नहीं हैं कि आप वास्तविक समस्या देख रहे हैं, तो इसे कुछ बार करें।

0

ग्रहण टीपीटीपी एक और बहुत अच्छा और मुफ़्त प्रोफाइलर है।