2017-06-15 28 views
6

Javaプロセスがコンテナ内で実行されています。もちろん、私はホストマシン上でそのプロセスを見ることができ、そのpidも見ることができます。 jdkがクラスタ上ではなくホスト上にインストールされている場合、このpidを使用して、ドッカー・コンテナ内のjavaプロセスに対してホストからjstackを実行できますか?ちなみに、私はそれを試してみましたが、あなたはあなたのソフトウェアが動作しているとまったく同じJVMのバージョンから来てニーズを使用しているjstackバージョンエラーコンテナ内のJavaプロセスのスレッドダンプをホストから取り出すことはできますか?

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

jstackだけでなく、ホストからkill -3 pidを実行することも可能ですか? – Mark

+0

はいマーク。あなたはドッカー自体を使って信号を送ることができます。 docker kill --signal SIGQUIT hobgoblin

答えて

0

を次のように走りました。

jstackをアプリケーションコンテナ内で実行すると機能します。

ソフトウェア上でリモートデバッグサーバ/ jmxをアクティブにした後に、リモートデバッグでjstackを実行することもできます。また

、あなたのコンテナがjstack持っていない場合、あなたはおそらく実行して、JVMコンテナの同じPID名前空間で、jstack同じJVMで構築されたコンテナが、船を実行することができます。

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

関連する問題