問題タブ [jvmti]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2886 参照

asynchronous - AsyncGetCallTrace を呼び出す SIGPROF ハンドラーを正しく記述する方法は?

さまざまな Java クライアントのスレッドのスタック トレースを定期的に出力することを目的とした、簡潔で単純なプロファイラー (C 言語) を作成しています。侵入を最小限に抑え、スレッドの状態に関係なくスタック トレースを可能にするAsyncGetCallTrace代わりに、文書化されていない関数を使用する必要があります。GetStackTrace関数のソース コードは、http: //download.java.net/openjdk/jdk6/promoted/b20/openjdk-6-src-b20-21_jun_2010.tar.gz にありhotspot/src/share/vm/prims/forte.cppます。AsyncGetCallTraceJVMTI、シグナル処理、およびタイミングについて説明しているいくつかのマニュアル ページと、呼び出しの設定方法に関する詳細が記載されたブログを見つけました。 -and.html

このブログに欠けているのは、シグナル ハンドラー内で実際に関数を呼び出すコードです (著者は、読者が自分でこれを実行できると想定しています)。まさにこれを行うための助けを求めています。前述のファイルで定義されているように、 struct ASGCT_CallTrace(および内部)を作成する方法と場所がわかりません。は に渡されるパラメータの 1 つなので、作成する必要がありますが、そのフィールドの正しい値を取得する方法がわかりません: 、、および。さらに、渡された 3 番目のパラメーターがどうあるべきかわかりませんか?struct ASGCT_CallFrameforte.cppstruct ASGCT_CallTraceAsyncGetCallTraceJNIEnv *env_idjint num_framesJVMPI_CallFrame *framesAsyncGetCallTrace (void* ucontext)

上記の問題は、私が抱えている主なものです。ただし、私が直面している他の問題には次のものがあります。

  1. SIGPROF指定された間隔で正確にタイマーによって発生するようには見えませんが、少し頻度が低くなります。つまり、タイマーを毎秒 (1 秒、0 usec) 送信するように設定すると、5 秒の実行でハンドラー出力SIGPROFが 5 つ未満になります (通常は 1 ~ 3)。SIGPROF

  2. SIGPROFThread.sleepハンドラの出力は、Java コードの実行中にまったく表示されません。したがって、 aSIGPROFが毎秒送信され、私が を持っているThread.sleep(5000);場合、そのコードの実行中にハンドラー出力は取得されません。

どんな助けでも大歓迎です。追加の詳細 (およびコードとサンプル出力の一部) は、リクエストに応じて投稿されます。

0 投票する
1 に答える
1360 参照

code-analysis - BCI(バイトコードインデックス)をソースコードの行番号に変換する

私はJavaプログラムをプロファイルするためにJVMTIコードを書いています。これは主に、関数AsyncGetCallTraceを使用して一定の時間間隔でランダムスレッドからスタックトレースを取得することを伴います。したがって、CallTrace構造体を取得できます。各構造体には、スタックトレース内の個々のフレームに関するデータを含むCallFrame構造体の配列が含まれています。具体的には、これらのデータは、jmethodID method_id(フレームが配置されているjavaメソッドのID)と:jint lineno(ドキュメントを理解している限り、.classファイル内のメソッドのBCI)で構成されます。JVMTIフレームワークを使用してこの「lineno」を対応するソースコードの行番号に変換する方法が見つからないようです(少なくとも/ usr / lib / jvm / java-6-sun / includeにあるファイルjvmti.hを参照してください)。 Linuxの場合)。実際、JVMTIフレームワークの外部でも、http://jakarta.apache.org/bcel/apidocs/org/apache/bcel/classfile/LineNumberTable.htmlですが、これでも私が望むことをしていない可能性があり、追加のインストールが必要であり、データを処理する必要があります、別のJavaプログラムを使用して、C++JMVTIコードによって生成されました。

JVMTI内から(または何らかの方法で)BCIをソースコードの行番号に変換する方法を誰かが知っている場合は、助けてください!

[この分野をよく知っている人がいたら、私に知らせてください。プロセスについてさらにいくつか質問があります。]

0 投票する
1 に答える
499 参照

java - testng の実行中にプログラムによるプロファイリングを行う方法

一連の回帰テスト ケースについてプロファイリングを行う予定です。私の考えは、いくつかのプロファイリング ツール API を呼び出し、テスト ケースの実行の最後にプロファイリングされたデータを出力する testng メソッドの周りで AOP を活用することです。テストの実行中に作成されたオブジェクトの数、使用されたメモリなどのデータをログに記録したい。

データを取得するのに役立つオープンソースのプロファイラ API があるかどうか疑問に思っていますか?JMVTI を調べましたが、見ている情報を提供できるかどうかはわかりません。さらに、エージェントをデプロイしてコマンドラインから呼び出す必要があります。

どんな指針も高く評価されます。

ありがとう

0 投票する
2 に答える
639 参照

java - インスタンスがどの GC 世代に存在するかをプログラムで調べることはできますか?

この質問はHotSpot 世代に限定されています。特定のインスタンスがどの世代に住んでいるかをプログラムで調べる方法はありますか? 次のようなデータ:

  • 若い世代か古い世代か?
  • 若い場合、どのサバイバー スペースですか?
  • TLABの中?どのスレッド?

次のようなことができる限り、任意の手法 (例: BTraceJVMTI ) が機能します。

物乞いは選択者になることはできませんが、理想的には、関心のあるインスタンスが発生した瞬間にある世代から別の世代に移動された時期を知ることもできます(つまり、イベント コールバックに基づいており、ポーリングに内在する遅延とオーバーヘッドには関心がありません)。

理由もなく「いいえ」と言う答えには興味がありません:)

0 投票する
6 に答える
2295 参照

java - 他のJavaアプリケーションによって生成された例外またはエラーを監視する方法は?

デーモンとして実行できるアプリケーションを検索または開発し、ホストで実行されているJavaアプリケーションが例外またはエラーを受け取ったときに電子メールまたはSMSで管理者に通知したいと思います。JVMTIが私の目標の一部を達成できることは知っていますが、それは監視対象アプリケーションのパフォーマンスに影響を与えます(どれだけになるかはわかりませんが、わずかであれば許容されます)。また、開発するのは面倒な作業のようです。 JVMTIエージェントであり、複数のアプリケーションが同じエージェントを使用して同時に実行された場合にどうなるかわかりません。より良い解決策はありますか?前もって感謝します。

0 投票する
2 に答える
645 参照

java - JVMTI _jclass toString

JVM TI _jclassの名前を取得するにはどうすればよいですか?JVMTIエージェントにロードされたクラスの名前を表示したいのですが、_jclassインスタンスからクラスの名前を取得する方法がわかりません。

0 投票する
1 に答える
646 参照

java - Java エージェント、インストルメンテーション、アレイの作成

配列の作成ごとに特定の処理を行う Java アプリケーション用のエージェントを作成する必要があります。これまでのところ、このイベントでコードを実行する方法を見つけることができませんでした。

  1. java.lang.instrument.ClassFileTransformer は「配列クラス」を取得しないため、「配列のコンストラクター」にフックする方法はありません。そして「配列クラスは決して変更できません」
  2. これに対応する JVMTI イベントはありません

助言がありますか?

0 投票する
6 に答える
5166 参照

java - JVMTIに加えてJavaAPI?

JVMTIの上で使用できる優れたJavaAPIはありますか?

0 投票する
2 に答える
1112 参照

java-native-interface - JNI jclass から Java クラスのサイズを決定する

JNIを使​​用してプログラムを分析しています。jclass 参照を取得した後、基になるクラスのサイズをどのように見つけることができるのでしょうか?

例: class cls = env->FindClass("Lee/Boehm/Test");

ここから、ホットスポットのヒープ内のクラス Lee.Boehm.Test のサイズを評価するにはどうすればよいですか?

ベームさんありがとう

0 投票する
2 に答える
147 参照

java - JVM TI のリンク ライブラリ名

Mac OS X で JVM TI サンプル エージェントを作成しようとしています。Java 5 がインストールされています。サンプル エージェント コードをリンクする必要がある動的ライブラリを知りたいですか?