2009-05-25 11 views
27

मैं अपने जावा एप्लिकेशन पर jstack कमांड चलाने की कोशिश कर रहा हूं। एप्लिकेशन ज़बॉस के अंदर चल रहा है, लगभग 4 जीबी मेमोरी पर कब्जा कर रहा है। ओएस विंडोज सर्वर 2003 मानक संस्करण है। हर बार मुझे एक त्रुटि मिलती है "इस कमांड को संसाधित करने के लिए पर्याप्त भंडारण उपलब्ध नहीं है"। पर्याप्त राम, 16 जीबी, और डिस्क स्थान है। तो, कोई विचार?जेस्टैक और पर्याप्त कमांड इस कमांड को संसाधित करने के लिए उपलब्ध नहीं है

+3

यह एक विंडोज़ त्रुटि संदेश प्रतीत होता है। –

+0

मेरे पास यह टोमकैट है जो 280 एमबी ले रहा है। – ripper234

+0

इस प्रश्न को भी देखा - http://stackoverflow.com/questions/222108/getting-the-java-thread-id-and-stack-trace-of-run-away-java-thread यह ' jconsole के रूप में मदद नहीं करता है आवेदन। – ripper234

उत्तर

43

मैं Win2008r2 पर हाल ही में इस में भाग गया और सोचा था कि मैं अपने समाधान का हिस्सा था, क्योंकि यह कुछ समय लिया यह पता लगाने की। Rob's comment about psexec -s यह मेरे लिए क्या किया है।

यह Vista पर प्रतीत होता है कि और बाद में jstack उपयोगकर्ता प्रसंग की वजह से सेवाओं के खिलाफ काम नहीं करता। इसमें स्मृति के साथ कुछ लेना देना नहीं है। मुझे संदेह है कि इसी कारण लोगों ने 2003 में रिमोट डेस्कटॉप के माध्यम से इस समस्या को देखा है, जब तक कि आप mstsc पर/admin या/console स्विच का उपयोग न करें। विस्टा के रूप में कड़ी सुरक्षा शायद यह तोड़ दिया है।

एक cmd खिड़की से मेरे ऐप शुरू ठीक काम किया, लेकिन है कि मुझे डिबग हमारे मानक स्थापित मदद नहीं करता है। जावा डीबग पोर्ट (विजुअलVM, ग्रहण या किसी भी जावा डीबगर के लिए) को सक्षम करने के लिए एक ऐप को पुनरारंभ करने की आवश्यकता होती है, इसलिए यदि आप पहले से डिबगिंग सक्षम नहीं हैं तो आप उस स्थिति को खो देते हैं जिसे आप शायद कैप्चर करने का प्रयास कर रहे हैं। मेरे उपयोगकर्ता प्रमाण-पत्रों के तहत सेवा शुरू करना काम नहीं किया - मैं उस पर थोड़ा आश्चर्यचकित था। लेकिन psexec -s सिस्टम संदर्भ से jstack चलाता है, जो एक आकर्षण की तरह काम किया। ओह, और यदि यूएसी चालू है, तो आपको एक उन्नत cmd प्रॉम्प्ट से psexec चलाने की आवश्यकता होगी।

+0

यह मेरे लिए बहुत अच्छा काम करता है। –

+1

ditto। मेरा दिन –

+0

सहेजने के लिए धन्यवाद यह Win 2003 के साथ बहुत अच्छा काम कर रहा है। धन्यवाद – dAm2K

3

हम भी एक मामूली आवेदन (1GB) के साथ एक Windows मशीन पर JStack चल समस्या थी। हम Netbeans का उपयोग कर हमारे ढेर और ढेर विश्लेषण कर समाप्त हो गया। यह डंप फ़ाइलों की पार्सिंग के साथ बहुत बेहतर लग रहा था। YMMV।

नेटबीन्स को प्रोफाइलिंग करने का प्रयास करें - यह बहुत अच्छा है। ध्यान दें कि विजुअलVM एक कटडाउन एनबी प्रोफाइलर है और 6u7 के साथ आता है।

7

अतीत में मैं इस देखा है जब JVM

पहले विंडोज 2003 को के रूप में एक Windows सेवा चल रहा है, अगर यह एक issue with the TMP directory है देखने के लिए जाँच।

दूसरा, jstack (या JConsole जैसे अन्य उपयोगिताओं) जब तक यह एक ही सत्र में चल रहा है स्थानीय प्रक्रिया से कनेक्ट नहीं होगा। यदि सेवा किसी विशिष्ट उपयोगकर्ता के रूप में चल रही है, तो आप उसी सत्र में लॉग इन करके कनेक्ट करने में सक्षम हो सकते हैं। यदि आप रिमोट डेस्कटॉप का उपयोग कर रहे हैं, तो आप "mstsc/admin" (कंसोल/कंसोल के लिए इस्तेमाल) का उपयोग करके कनेक्ट कर सकते हैं और फिर जेस्टैक चलाने की कोशिश कर सकते हैं। यह सुनिश्चित करने के लिए निश्चित रूप से जांचें कि टीएमपी निर्देशिका ठीक से सेट की गई है अगर यह समस्या को ठीक नहीं करती है।

सेवा LocalSystem के रूप में चल रहा है, उपरोक्त प्रक्रिया शायद ज्यादा मदद नहीं करेगा। मुझे नहीं पता कि स्थानीय सिस्टम के समान सत्र में लॉग इन करने का कोई तरीका है या नहीं।

कुछ अन्य विकल्पों दूरदराज के निगरानी के लिए प्रक्रिया की स्थापना की और एक पोर्ट पर कनेक्ट करने के लिए (सर्वर स्वयं या किसी अन्य मशीन से) jvisualvm का उपयोग करें और एक धागा डंप करने के लिए हो सकता है।

+16

समाधान अगर यह स्थानीय सिस्टम के रूप में चलता है: लॉगिन खाते का उपयोग करके "mstsc/admin" का उपयोग करके कनेक्ट करें (यह सुनिश्चित नहीं है कि मेरे पास सटीक अनुमतियां हैं, मेरा व्यवस्थापक प्रशासक समूह में था) और Sysinternals psexec टूल का उपयोग निम्नानुसार करें: psexec -एस "% JAVA_HOME% \ bin \ jstack.exe" पीआईडी> stack.txt जहां पीआईडी ​​आपकी प्रक्रिया की प्रक्रिया आईडी है। आपको अपने विशिष्ट पर्यावरण के आधार पर अपने जेडीके के वास्तविक पथ को भी प्रतिस्थापित करना पड़ सकता है। –

0

यह अंतर्निहित ओ/एस से एक त्रुटि संदेश है। फेंक दिया गया अपवाद पकड़ने के अलावा आप इस कोड से निपटने के लिए बहुत कुछ नहीं कर सकते हैं। इतना सीमित होने के लिए विंडोज़ को बू।

http://technet.microsoft.com/en-us/library/cc978735.aspx

2

psexec -s jstack PID >> c:\jstack.log पूरी तरह से उसी मशीन पर काम करता है। पहली बार इसमें कुछ समय लगा लेकिन फिर से मैंने फ़ाइल विकल्प पर रीडायरेक्ट के साथ निष्पादित किया, यह कुछ सेकंड में पूरा हुआ।

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