2009-05-25 6 views
27

私のJavaアプリケーションでjstackコマンドを実行しようとしています。アプリケーションはかなり大きく、jboss AS内で約4GBのメモリを占有しています。 OSはWindows Server 2003 Standard Editionです。 「このコマンドを処理するのに十分なストレージがない」というエラーが表示されるたびに十分なRAM、16GB、およびディスク容量があります。だから、どんなアイデアですか?Jstackと十分なストレージがこのコマンドを処理するために利用可能です

+3

これは、Windowsのエラーメッセージのようです。 –

+0

私は280メガバイトを取っているTomcatに持っています。 – ripper234

+0

この質問を見る - http://stackoverflow.com/questions/222108/getting-the-java-thread-id-and-stack-trace-of-run-away-java-thread それはdoesn ' jconsoleがアプリケーションを認識しないので、助けてください。 – ripper234

答えて

43

私はWin2008r2に最近、このに走った、それが把握してしばらく時間がかかったので、私は私の解決策を共有しようと思いました。 Rob's comment about psexec -sは私のために何をしたのですか?

Vista以降では、ユーザーコンテキストのためにjstackがサービスに対して動作しないようです。それは記憶とは関係ありません。これは、mstscで/ adminまたは/ consoleスイッチを使用しない限り、2003年にリモートデスクトップ経由でこの問題が発生したのと同じ理由と思われます。 Vistaの時点で、セキュリティの強化はおそらくそれを壊したものです。

cmdウィンドウから私のアプリを起動してもうまくいきましたが、標準インストールのデバッグには役立ちません。 Javaデバッグポート(VisualVM、Eclipse、またはほとんどのJavaデバッガ用)を有効にするには、アプリケーションを再起動する必要があります。デバッグを有効にしていない場合は、キャプチャしようとしている状態を失います。ユーザーの資格情報でサービスを開始できませんでした - 私は少し驚いていました。しかし、psexec -sはシステムのコンテキストからjstackを実行します。これは魅力的でした。ああ、UACがオンの場合、昇格したcmdプロンプトからpsexecを実行する必要があります。

+0

これは私のためにはうまくいった。 –

+1

も同上。私の一日を節約してくれてありがとう –

+0

これはWin 2003とうまくいっています。ありがとうございました – dAm2K

3

適度なアプリケーション(1GB)のWindowsマシンでJStackを実行する際に問題が発生しました。 Netbeansを使用してスタックとヒープ解析を終了しました。これは、ダンプファイルの構文解析に非常によく似ていたようです。 YMMV。

Netbeansにプロファイリングを試してください。非常に良いです。 VisualVMはカットダウンのNBプロファイラであり、6u7が付属しています。 Windowsの2003上のJVMがWindowsサービスとして実行されているとき、私はこれを見ている過去に

7

まず、これはissue with the TMP directoryであるかどうかを確認します。

第2に、jstack(またはjconsoleなどの他のユーティリティ)は、同じセッションで実行されていない限り、ローカルプロセスに接続しません。サービスが特定のユーザーとして実行されている場合は、同じセッションにログインして接続することができます。リモートデスクトップを使用している場合は、 "mstsc/admin"(/ consoleであった)を使用して接続し、jstackを再度実行してみてください。 TMPディレクトリが正しく設定されていることを確認して問題が解決しない場合は、必ず確認してください。

サービスがLocalSystemとして実行されている場合、上記の手順はあまり役に立ちません。 LocalSystemと同じセッションにログインする方法があるかどうかはわかりません。

リモート監視用にプロセスを設定し、jvisualvm(サーバーまたは他のマシンから)を使用してポートに接続し、スレッド・ダンプを行うことがあります。

+16

ローカルシステムとして実行されている場合の解決策: ログインアカウントを使用して「mstsc/admin」を使用して接続します(必要な権限が不明、管理者グループに所属しています)。 psexec -s "%JAVA_HOME%¥bin¥jstack.exe" PID> stack.txt ここで、PIDはプロセスのプロセスIDです。特定の環境に応じてJDKの実際のパスを置き換える必要があるかもしれません。 –

0

これは、基になるO/Sからのエラーメッセージです。スローされた例外をキャッチする以外に、これに対処するためにコードで行うことはあまりありません。 Windowsには非常に限られているため、ブーイングしてください。

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

2

psexec -s jstack PID >> c:\jstack.logは完全に同じマシンで動作します。最初は時間がかかりましたが、もう一度ファイルにリダイレクトするオプションで実行しましたが、それは数秒で完了しました。

関連する問題