問題タブ [javaagents]
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 - Tomcat でホストされている特定のアプリケーションに javaagent を使用するには
テキストファイルでJavaアプリケーションの実行時間を取得するためのpremainクラスを含むxyz.jarファイルがあります。この javaagent を使用する必要がある Tomcat サーバーでホストされている Web アプリ (myapp.war など) があります。catalina.batを入れてみ"SET JAVA_OPTS=%JAVA_OPTS% -javaagent:/C:/xyz.jar"
ました。サーバーを起動しましたが、必要な出力が見つかりません。
java - javaagent のプリメイン クラスは、Tomcat にデプロイされた Web アプリケーションに対して機能します
私は javaagent について学んでいて、簡単なプロファイラーを作成しました
http://www.javabeat.net/2012/06/introduction-to-java-agents/
Java アプリケーションのプロファイリングを行ったところ、正常に動作しました。このプロファイラーを使用して、Tomcat にデプロイされた Web アプリケーションをプロファイリングできますか? CATALINA.bat "SET JAVA_OPTS=%JAVA_OPTS% -javaagent:/path-to-profiler/profiler.jar" でこの設定を試し、サーバーを起動しましたが、必要な出力が見つかりませんでした。
java - 集中ログ - サーバー間でのメッセージの関連付け
私たちは非常に分散したシステムを持っています。サイトでのユーザーのリクエストには、複数のサービスへの呼び出しが含まれる場合があります。たとえば、ユーザーがサイトにログオンすると、広告サービス、パーソナライズ サービス、関連するニュース サービスなどに呼び出しが行われ、ログイン時に表示するために必要なデータが構築されます。高レベルの設計: URL へのリクエストは Spring MVC コントローラーにマップされ、そのコントローラーは (ほとんどは HttpClient を使用して) さまざまなサービスを呼び出します。
Logstash、ElasticSearch、Kibana、Log4j/SLF4J を使用して集中ログ ソリューションを実装しています。サイトで問題が報告された場合、ログ レベルをデバッグに変更し、すべてのサービスで特定のリクエストのログ メッセージを表示できるようにしたいと考えています。Log4j MDC にリクエスト ID を設定しているため、Web アプリケーション サーバーでその特定のリクエストのログ メッセージを識別できます。他のサービスへの呼び出しからメッセージを関連付けるにはどうすればよいですか?
フロー: ユーザー ログイン --> Log4j MDC にリクエスト ID を入力してメッセージをログに記録する Spring MVC コントローラーにマップされたリクエスト --> サービス 1、サービス 2、サービス 3 への HTTP クライアント呼び出し
service1、service2、service3 からのメッセージを、MVC コントローラーによってログに記録されたメッセージに関連付ける方法。1 つの解決策は、http クライアント呼び出しで要求 ID を渡すことです。このパラダイムに従うアプリケーションはたくさんあるため、あらゆる場所でコードを変更することは理想的なソリューションではありません。
更新1:
jvm エージェントについてはよくわかりませんが、カスタム エージェントを開発して、ネットワーク呼び出しをインターセプトし、パラメーターを追加できるかどうか疑問に思っています。受信側のカスタム エージェントは、パラメーターを検出し、それを ThreadLocal 変数に追加します。Dynatrace PurePath テクノロジーは、何らかの方法で JVM 間で呼び出しを関連付けます。jvm エージェントを注入する必要があるため、エージェントで呼び出しをインターセプトしていると思います。このビデオをチェックしてください
java - クラスパスに javaagent のクラスを配置する方法
asm-4 を使用してコードを計測する javaagent を開発しようとしています。今のところ、私は非常に基本的な問題で立ち往生しています.javaagentのクラスローダーはasm依存関係を認識しないため、失敗します。エージェントが必要とするすべてのクラスを含む jar-with-dependencies (別名 maven ビルド プラグイン) を提供する必要がありますか、またはクラスを Java エージェントに追加する別の方法はありますか? クラスパスでjar asm-all.jarを直接参照しても役に立ちませんでした。Premain-Class 属性をアセンブリ プラグインで設定できなかったため、jar-with-dependencies のビルドは最初は役に立ちませんでした。助けていただければ幸いです;-)
java - javaagent を使用して、Tomcat でホストされているアプリケーションの開始時刻と終了時刻を取得する
Java アプリケーションの実行時間を取得するために javaagent アプリケーションを作成しましたが、正常に動作します。このアプリケーションを使用して、Tomcat サーバーでホストされているアプリケーションの実行時間を取得しようとしました。必要な出力が得られませんでした。私の javaagent コードは " http://www.ibm.com/developerworks/java/library/j-jip/ " からのものです。2 つの疑問があります。1. Tomcat でホストされている特定のアプリケーションを除外し、javaagent を使用してプロファイルする方法。2. javaagent は、Tomcat でアプリケーションの開始と終了をどのように検出しますか。
java - Javassist の CtMethod.insertAt(line,src) は、間違ったバイトコード位置でコードを計測します
私の目標は、コードの各基本ブロックの先頭に少しのインストルメンテーション コードを挿入することです。Javaassist の ControlFlow.Block と CtMethod.insertAt() を使用すると、かなり単純なタスクのように見えます。これまでのところ、関連するコードのチャンクは次のとおりです (変換関数にあります)。
の「line」パラメータCtMethod.insertAt(line,srcCode)
は、バイトコードの行位置ではなく、ソース コードの行位置であることに注意してください。ソース コードでは、いくつかの基本ブロックが同じ行番号を報告しています。出力は次のとおりです。
At #
はコードを配置するように要求した場所を-> #
表し、 は実際に挿入されたソース コード内の場所を表します (すべてがうまくいけば、それらは同じになるはずです)。内のすべてが{ ... }
配置したいコードです (_JDA_mse
は Javassist メソッドを使用して関数に追加したローカル変数なので、使用しても問題ありません)。
問題はfor(int i=0; i<size; ++i)
、ソース コードでは分離できないが、バイトコードでは明確に区別される複数の基本ブロックが含まれていることです。これが、複数の基本ブロックが同じソース行にマップされている理由であり、ソース コード行が基本ブロックを記録するのに十分な計測精度を提供していないことを示しています。 提供された CtMethod.insertAt(sourceLine,srcString) を使用する代わりに、CtMethod.insertAt(bytecodePosition,srcString) をエミュレートする方法はありますか?
playframework-2.0 - Play 2.1 / テストの実行中に javaagent を考慮する
私の目標は、Playアプリに含まれる統合テストを開始することです。
そのために、Intellij を介してそれらを起動していました。これらのテストにはSpringのaspectJウィービングが必要なので、IntellijテストconfでこのVM引数を正確に記述しました:
全体が機能します。
play
ここで、コマンドに続く単純なコマンドを使用して、コマンドラインからそれらを起動できるようにしたいと考えていますtest-only
。
最初に、javaagent を Play アプリに追加する方法を扱ったこの投稿を読みました。
build
したがって、 Spring の javaagent を追加して、Play のファイルを次のように変更します。
ただし、私のテストは失敗するだけです.SpringのアスペクトJウィービングの欠落について不平を言っています。しかし、test-only
別のプロセスを起動するので、それは確かに論理的です...
javaagent を使用して、アスペクト J ウィービングをテストで処理する方法はありますか?