問題タブ [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.
java - jpdaを使用してweblogicに接続する
Weblogic 10(java 6)にデプロイされたJavaEEアプリケーションでメソッド呼び出しをプロファイリング/トレースするためのユーティリティ/ツールを構築しています。その目的は、巨大なエンタープライズアプリケーションのイベントの流れをすばやく理解することです。(コードを確認するのは面倒です)
jdk6にバンドルされている「Trace」デモアプリケーションに従って、バージョンをビルドしました。通常のデスクトップスタイルのアプリケーションに接続し、メソッド呼び出しを正常にトレースしている間、アプリケーションは正常に動作します。ただし、Weblogicの場合、EventQueue.removeはnullのEventSetを返します。weblogicVMへの接続が成功することに注意してください。ただし、接続されるとすぐに、デプロイされたWebアプリケーションでクリックまたはアクティビティが発生すると、ターゲットVMのスレッドがハングし、最終的にhttpリクエストがタイムアウトします。
weblogicの開始スクリプトに次のvm引数を使用しています。
使用されているサンプルコードは、jdk1.6.0_13 \ demo \ jpda \ examples \ com \ sun \ tools \ example\traceからのものです。
誰かが同様のツールの経験があるか、または同様の問題に直面しましたか?Eclipseのリモートデバッグはどのように実装されているのだろうか。
ありがとう!
java - jvmti と Spring AOP の競合
背景: Java .class ファイルを暗号化するために何かを行っており、.class ファイルがロードされたときに jvmti agentlib を使用してソース データを復号化しています。Java SEでこれを行うとうまくいきます。
しかし、Spring AOP を使用して Java Web プロジェクトに対してこれを行うと、いくつかの例外がスローされます。
もちろん、 .class ファイルは で読み取ることができます。ContextLoaderListener
暗号化されていますが、なぜ AOP は jvmti agentlib でそれをロードしないのでしょうか?
Spring AOP は jvmti agentlib なしで .class ファイルをロードするようです
jvmti と AOP の間に何らかの関係がありますか? この問題についてもっと知りたいです。
java - JVMTIを使用してCPU使用率を計算するには
JavaアプリケーションのCPU使用率を探しています。CPU使用率を取得する最良の方法は、(process_time / elapsed_time)*100.0です。Javaアプリケーションの場合、process_timeはcom.sun.management.OperatingSystemMXBeanによって取得されます。JVMTIを使用してCPU使用率を計算する方法はありますか?
java - Java Attach API:UnsatisfiedLinkError
を使用すると、 LinuxJava Attach API
でのみ次のリンクエラーが発生します(別のマシンで試してみました)。
興味深いことに、SolarisとWindowsでは、そのままで動作します。
java.library.path
を含むディレクトリを指すように指定するいくつかの組み合わせを試しましたlibattach.so
が、運がありませんでした。
ここで何が問題になっていますか?
そしておまけの質問として:
どのネイティブライブラリが実際にJavaクラスにバインドされているかを確認する方法はありますか?
java - Java Bytecode Instrumentation: defineClass へのリフレクション呼び出しでの NullPointerException
意図:
私はjava.lang.instrumentパッケージを使用して、Java プログラム用のインストルメンテーションを作成しています。各メソッドの最初と最後にメソッド呼び出しを追加するために、このシステムを介してバイトコード操作を使用するという考え方です。一般的に言えば、変更された Java メソッドは次のようになります。
MyFancyProfiler
premain
は、メソッド ( の一部) の実行中に初期化される、比較的複雑なシステムへのエントリ ポイントjava.lang.instrument
です。
編集-この質問の解決策でMyFancyProfiler
説明されているようなメカニズムを通じて、システムの残りの部分への参照を取得する静的 API が含まれています。参照は として取得され、リフレクションを介して適切な呼び出しが行われるため、現在の ClassLoader が基礎となるクラスを認識していなくても機能します。Object
困難
単純な Java プログラムの場合、このアプローチはうまく機能します。「実際の」アプリ (ウィンドウ化されたアプリケーション、特にRCP/OSGiアプリケーションなど) の場合、ClassLoaders
. ClassLoaders
クラスを見つける方法がわからない人もいるMyFancyProfiler
ので、 で静的メソッドを呼び出そうとすると例外がスローされMyFancyProfiler
ます。
これに対する私の解決策(および私の実際の問題が発生している場所)は、現在、反射的に呼び出しMyFancyProfiler
て遭遇したそれぞれに「注入」することです。その要点は次のとおりです。ClassLoader
defineClass
詳細情報を編集- このインジェクションの理由は、ロードされた ClassLoader に関係なく、すべてのクラスがMyFancyProfiler.methodEntered
直接呼び出すことができるようにするためです。その呼び出しを行ったら、MyFancyProfiler
リフレクションを使用してシステムの残りの部分とやり取りする必要があります。そうしないと、直接参照しようとすると InvocationTargetException または NoClassDef 例外が発生します。私は現在、「直接的な」依存関係MyFancyProfiler
がJREシステムクラスだけであるように動作しているので、問題ないようです。
問題
これでも機能します!ほとんどの時間!しかし、Eclipse をトレースしようとしている (コマンド ラインから IDE を起動している) ときに遭遇する少なくとも 2 つの個別の ClassLoader については、メソッドNullPointerException
内から次のようなメッセージが表示されます。ClassLoader.defineClass
ClassLoader.javaの 500 行目は、コンストラクター時に初期化される Set のように見える へdomains.add(pd)
の呼び出しであり、(私が知る限り)「デフォルト」である必要があります。したがって、その行が . を引き起こす明白な方法はわかりません。現在、私は困惑しており、誰かがこれについて何らかの洞察を提供できることを望んでいます。domains
pd
ProtectionDomain
ProtectionDomain
NullPointerException
defineClass
がこのように失敗する原因は何ですか? また、明らかな解決策がない場合は、全体的な問題に対する潜在的な代替アプローチを提供できますか?
heap-memory - jvmti: class_tag の使い方
特定の状態で現在のヒープを取得するために、JVMTI API ( http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html ) を見ています。
これを行うには、jvmtiHeapCallbacksへのポインタを引数として取るFollowReferences ( http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html#FollowReferences ) メソッドを使用したいと思います。いくつかのコールバック、特にヒープ参照コールバックを定義する構造。
このコールバックは、次の形式にする必要があります。
class_tag の使い方がわかりません。API で、class_tag を jclass に変換する機能を見つけることができませんでした。いくつかの例を見てきましたが、class_tag を使用できませんでした。
API には SetTag 関数と GetTag 関数がありますが、それらは jclass ではなく jobject 用のようです。
jvmti - Sun JVM で大きなオブジェクトを割り当てたコードを見つける
Sun JAVAにラージ オブジェクトを割り当てたメソッドを検索するような機能はありますか?
また
native - JVMTI ネイティブ エージェント (DLL) を実行中の Java プログラムにロードできない - AgentLoadException
この問題に数日間苦労しましたが、まだ正しい答えが得られませんでした。
問題の説明は次のとおりです。 通常の Java プログラム (プログラム A)を作成し、Agent_OnLoad、Agent_OnAttach、Agent_OnUnload メソッドを使用して Windows ベースのネイティブ エージェント(*.dll、C/C++ で作成) を作成しました。 Java コマンドライン フラグ (-agentlib)。次に、別の Java プログラムを作成して、実行中の Java Program-A にネイティブ エージェントをアタッチしましたが (VM アタッチと loadAgentPath については、以下のコードを参照)、例外が発生しました。
これまたはその方法でagentPath(絶対または相対ファイルパス)を変更しようとしましたが、これらのどれも機能しません。これを機能させるには、他の方法を試す必要があります。私が必要としているのは、コマンドライン フラグを使用するのではなく、実行中の Java プログラムにネイティブ エージェントをアタッチすることです。
根本的な原因または解決策の手がかりを知っている人はいますか?
ところで、attach VM Java コードを次のように実行するコマンド ラインは次のとおりです。
環境関連情報:
- OS: Windows XP - Java バージョン: Java(TM) SE ランタイム環境 (ビルド 1.7.0-b147)