7

Windows を使用するクライアント マシンで実行されている JVM プロセスのスタック トレースを取得する必要があります。

クライアントには JRE がインストールされていますが、JDK はインストールされていません。

JStack を使用したいのですが、JStack がインストールされておらず、クライアントのマシンに JDK をインストールできません。また、Java Webstart セッションから AdaptJ スタック トレース製品を使用しようとしましたが、リモートで接続すると、指定された PID でアプリケーションを開始したセッションではないというエラーが発生するため、機能しませんでした。

基本的に、JDK をインストールせずに JStack をインストールする方法が必要です。

4

6 に答える 6

5

おそらく、まさにこの目的のために設計されたSendSignalを使用したいと思うでしょう。

于 2009-03-18T18:59:38.703 に答える
4

JDK と関連ツールは、「インストール」されているかどうかに関係なく正常に動作します。圧縮して一時ディレクトリに展開するだけで、jstack を実行できるはずです。(PATH または JAVA_HOME の変更は必要ありません)。クライアントがアプリケーションを実行している JRE に対応する同じバージョンを使用していることを確認してください。少なくともJConsoleの場合、バージョンが違うと面倒そうです。jstack が同じように動作するかどうかはわかりません。

これが理想的な解決策だと言っているのではなく、うまくいくというだけです。jdigital と Eddie の提案は最初の賭けとしては良いと思います。インストーラーを実行するのと同じように既存の Java インストールに干渉するべきではありませんが、それでも顧客は同意しないかもしれません。

于 2009-03-18T19:35:56.837 に答える
2

リモート アクセス経由でJConsoleを使用できますか?

于 2009-03-18T19:05:49.017 に答える
0

JRE のみでスレッド ダンプを取得するには、同じ Java バージョンの JDK から tools.jar と attach.dll が必要です。これをどこかにインストールし、これらを jre にコピーします。同一バージョンでなければなりません!

システム アカウントで実行されているプロセスのダンプが必要な場合は、Windows sysinternals psexec.exe を使用してプロセスにアクセスできます。これを JRE ビンまたはパスのどこかにコピーします。

このバッチ ファイルは、複数のトレースを取得して簡単に比較できるように、スタック ダンプを日時ファイル名のファイルに書き込みます。

Threads.bat

:: Creates a thread dump for the tomcat6.exe process 
:: saved in a timestamped filename and views it!
:: Jim Birch 20111128 rev 2015-10-12

::Required the following files to be placed in the jre/bin folder:
:: attach.dll  - From the Java JDK  (must be the same version)
:: tools.jar   - ditto
:: psexec.exe  - from Windows sysinternals

::cd to jre/bin
d:
cd \application\jre\bin

::build datetime filename
rem datetime from wmi.exe
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set dt0=%%I
rem  datetime string as YYYY-MM-DD-hhmmss
set dt=%dt0:~0,4%-%dt0:~4,2%-%dt0:~6,2%-%dt0:~8,6%
set ff=td-%dt%.txt
echo filename: %ff%

::PID of the process by named exe, eg, tomcat6    
for /F "tokens=2" %%I in ('TASKLIST /NH /FI "IMAGENAME eq tomcat6.exe"' ) DO SET PID=%%I
echo pid: %PID%

::combine above with jstack command
psexec -s jstack.exe -l %PID%  >>  %ff%

:: view result
start %ff%

::insert pause to debug or timer to review script operation
::ping localhost -n 20 >nul
::pause
于 2015-10-12T02:30:32.913 に答える