2017-06-15 11 views
6

मेरा जावा प्रक्रिया कंटेनर के अंदर चल रही है। बेशक मैं मेजबान मशीन पर उस प्रक्रिया को देख सकता हूं और इसके पिड को भी देख सकता हूं। यदि क्लस्टर पर jdk इंस्टॉल नहीं है लेकिन मेजबान पर, क्या मैं इस पिड का उपयोग करके, डॉकर कंटेनर में जावा प्रक्रिया के खिलाफ होस्ट से jstack चला सकता हूं। वैसे, मैं इसे करने की कोशिश की और निम्न त्रुटि में भागक्या मेजबान से कंटेनर में जावा प्रक्रिया का थ्रेड डंप लेना संभव है?

Attaching to process ID 66367, please wait... 
Error attaching to process: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process) 
sun.jvm.hotspot.debugger.DebuggerException: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process) 
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:411) 
at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305) 
at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140) 
at sun.jvm.hotspot.tools.Tool.start(Tool.java:185) 
at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118) 
at sun.jvm.hotspot.tools.JStack.main(JStack.java:92) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.tools.jstack.JStack.runJStackTool(JStack.java:140) 
at sun.tools.jstack.JStack.main(JStack.java:106) 
+0

मेजबान से हत्या -3-पिड चलाने के साथ-साथ jstack भी संभव है? – Mark

+0

हां मार्क। हालांकि आप डॉकर का उपयोग करके सिग्नल भेज सकते हैं। डॉकर मार - सिग्नल सिग्क्विट <कंटेनर-आईडी> – hobgoblin

उत्तर

0

आप की जरूरत का उपयोग कर रहे अपने सॉफ्टवेयर चल रहा है ठीक उसी JVM संस्करण से आने के लिए jstack संस्करण।

आवेदन कंटेनर के भीतर jstack चलाना काम करेगा।

आप अपने सॉफ्टवेयर पर रिमोट डीबगिंग सर्वर/जेएमएक्स को सक्रिय करने के बाद रिमोट डीबगिंग में jstack चला सकते हैं।

इसके अलावा, अगर अपने कंटेनर jstack नहीं है, तो आप शायद एक कंटेनर अपने JVM कंटेनर का एक ही पीआईडी ​​नाम स्थान में, jstack एक ही JVM लेकिन जहाजों के साथ बनाया गया चलाकर चला सकते हैं:

docker run --pid=container:your_app your_jstack_images jstack $in_your_app_container_jvms_pid

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