2016-05-06 3 views
0

NetBeans RCPベースのアプリケーションを使用していますが、一部のPCだけで、時には新しいTopComponentを開いた後にフリーズすることがあります。正直なところ、私はJVMのスレッドダンプを見たことはありませんでしたが、何が起こっているのか他には何の手がかりもありません。残念ながら、私はダンプを生成しようとするとjstackは、次の例外を生成するので、スレッドダンプファイルは、完了したかどうかはわかりません。NetBeans RCPアプリケーションのフリーズからスレッドダンプを調べるのに役立つ必要があります

Attaching to core c:\bas.txt from executable 8836, please wait... 
Error attaching to core file: Windbg Error: OpenDumpFile failed! 
sun.jvm.hotspot.debugger.DebuggerException: Windbg Error: OpenDumpFile failed! 
     at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach0(Native Method) 
     at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach(WindbgDebuggerLocal.java:160) 
     at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:673) 
     at sun.jvm.hotspot.HotSpotAgent.setupDebuggerWin32(HotSpotAgent.java:569) 
     at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:335) 
     at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304) 
     at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:156) 
     at sun.jvm.hotspot.tools.Tool.start(Tool.java:191) 
     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:497) 
     at sun.tools.jstack.JStack.runJStackTool(JStack.java:140) 
     at sun.tools.jstack.JStack.main(JStack.java:106) 

だから私は、コンソールウィンドウに自分のRCPアプリケーションを起動するために管理し、 Ctrl + Breakキーを押したままにします。コンソールウィンドウにはバッファから削除された行が増える可能性があるため、完全かどうかはわかりません。

とにかく、これは、ダンプファイル(私は手動でスレッドダンプアナライザでそれを開くために最初の行を追加しました)へのリンクです:

http://pastebin.com/1M5T85i5

誰かがこれを理解する私を助けることができますか?

ありがとうございました

答えて

0

これはデッドロックのようです。デッドロックを診断する最も簡単な方法は、JConsole(JDKに付属)を使用してJavaプログラムにアタッチし、デッドロック検出機能を使用することです。

  1. jconsoleを実行JAVA_HOME/binに/ハングしたプロセスを選択し、安全な接続に関する警告を取得した場合は、単に安全でないボタンをクリックして接続
  2. をクリックします。
  3. スレッドタブを選択し、デッドロックの検出をクリックします。
  4. デッドロックが存在する場合、GUIは参加スレッドを強調表示します。
  5. ロックされたスレッドの呼び出しスタックを検査して、デッドロックの原因となっているロックの原因を突き止めることができます。
関連する問題