2010-01-14 13 views
14

जब मैं अपने जावा प्रोग्राम में kill -3 <pid> कमांड जारी करता हूं, तो यह कंसोल पर थ्रेड डंप उत्पन्न करता है। मैं इसे फ़ाइल में रीडायरेक्ट कैसे करूं?जेवीएम थ्रेड डंप स्थान

+0

ठीक है धन्यवाद लोग। मैं यह समझ गया। हत्या -3 कमांड मेरे जेवीएम को STDOUT को लिखने का कारण बना रहा था। मैंने इसे अपने जावा कॉल 1> "लॉगफाइल के लिए पथ" में जोड़ा और इसे काम करने के लिए मिला। – user242591

उत्तर

22

दो विकल्प:

stdout के साथ अपने जावा अनुप्रयोग चलाने

java com.example.MyApp > out.txt 

उपयोग jstack बजाय निर्देशित कर दिये।

jstack उपयोगिता आप एक धागा डंप हो और वर्तमान सांत्वना के बजाय जावा आवेदन के लिए stdout उत्पादन भेजने के लिए, आप इसे पुन: निर्देशित करने के लिए अनुमति देता है।

उदाहरण के लिए, यदि आपके जावा आवेदन की पीआईडी ​​12345 है (jps उपयोगिता का उपयोग इसे जल्दी पता लगाने के लिए):

jstack 12345 > threads.txt 
2

आप सभी धागे और अन्य JVM विवरण का ब्यौरा चाहते हैं, JConsole का प्रयास करें।

3

मैं आमतौर पर NetBeans प्रोफाइलर का उपयोग करता हूं, लेकिन jvisualvm कमांड लाइन से उपलब्ध है।

0

कृपया अपने आवेदन के लिए निम्नलिखित JVM तर्क संलग्न करें। डंप डंप पर डंप डंप पर कब्जा किया जाना चाहिए।

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=dump.log 

कृपया ध्यान दें कि यह रीडायरेक्ट नहीं करता है, लेकिन JVM डायग्नोस्टिक लॉगिंग को सक्षम बनाता है। तो, सिर पर भी संभव हो सकता है।

हालांकि, अगर आप वातावरण में JDK हो सकता है, jstack या jcmd (jcmd is preferred with JDK 1.8) का उपयोग कर, आप धागा डंप को पकड़ने और एक फाइल करने के लिए अनुप्रेषित कर सकते हैं।

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