2011-01-14 17 views
6

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

मैं कैसे निगरानी कर सकता हूं कि एप्लिकेशन में कौन सा थ्रेड (एप्लिकेशन स्टैक ट्रेस) समस्या पैदा कर रहा है?

मैं jconsole और PSI Probe के साथ जांच कर रहा हूं, लेकिन दोनों आवेदन के अंदर क्या थ्रेड सीपीयू उपयोग असामान्यता के कारण कोई विस्तृत जानकारी नहीं दे रहे हैं।

+0

है क्या '[जावास्क्रिप्ट प्रदर्शन]' टैग के साथ है? – skaffman

+0

@skaffman, क्षमा करें जावा-प्रदर्शन, मैंने इसे सही किया है। –

+0

हमारे पास हमारे उत्पादन सर्वर के साथ कुछ प्रदर्शन समस्याएं भी थीं, और चूंकि एक उत्पादन सर्वर के लिए प्रोफाइलर संलग्न करना मुश्किल है .. हमने न्यूरेलिक को आज़माया। यह आपकी प्रदर्शन जांच के लिए जोड़ने का एक अद्भुत टूल है। – eSniff

उत्तर

5

एक अपेक्षाकृत आसान तरीका यह है (जो या अपने मामले के लिए काम नहीं हो सकता है - कितनी देर तक व्यवहार होता है पर निर्भर करता है):

अपने अनुप्रयोग इस मामले में व्यवहार आप डिबग करना चाहते हैं (दर्शाती है जब , 90-100% CPU उपयोग) प्रक्रिया आईडी पर jstack का उपयोग करें:

http://download.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

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

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

+3

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

+0

Vista धन्यवाद। मैं jstack कोशिश करने जा रहा हूँ। –

2

आप किसी भी जावा एप्लिकेशन में सभी धागे के लिए एक क्विट सिग्नल भेजकर एक स्टैकट्रैक डंप प्राप्त कर सकते हैं।

kill -QUIT [processId] 

यह प्रक्रिया 'stdout' में दिखाई देगा।

1

बस मेरे 2 सेंट लेकिन मैं सोच रहा हूं कि क्या आप स्मृति समस्या का प्रयोग नहीं कर रहे हैं तो सीपीयू चोटियों जीसी गतिविधि हो सकती है। इसलिए जब आप jconsole के साथ अपने tomcat की निगरानी कर रहे हैं, तो मेमोरी टैब पर एक नज़र डालें और जांच करें कि ढेर का उपयोग उच्च नहीं होने वाला है या नहीं।

4

VisualVM जो आप खोज रहे हैं वह है। यह नए जेडीके के साथ जहाज करता है और आपको thread usage पर निगरानी करने की अनुमति देता है।

2

शीर्ष सीपीयू लेने वाली धागे को दिखाने के लिए एक अन्य उपकरण jvmtop

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