Continuous Profiler Agentは、パフォーマンスデータを収集するためにAlibaba CloudのJVMチームによって開発されたAlibaba Cloud Javaエージェントです。 Continuous Profiler Agentは、大規模な運用環境でテストされています。 それは高性能と高い安定性を提供します。 Logtailを使用して、Continuous Profiler AgentによってJavaプログラムからFull-stack Observabilityアプリケーションに報告されたパフォーマンスデータを収集し、視覚化されたモニタリングと分析を行うことができます。
前提条件
フルスタックのObservabilityインスタンスが作成されます。 詳細は、インスタンスの作成をご参照ください。
制限事項
Linux Logtail V1.7以降のみがサポートされています。
次のLinuxディストリビューションがサポートされています: CentOS、Red Hat、Alibaba Cloud Linux、Ubuntu、およびDebian。 カーネルのバージョンは2.6.32-431.23.3.el6.x86_64以降である必要があります。 GNU CライブラリとMUSLライブラリがサポートされています。
JDKバージョンがサポートされています。 下表に詳細を示します。
エンジンタイプ
CPU
メモリ
自動エンジン
OpenJDK 8u272以降、JDK 11、およびJDK 17がサポートされています。
OracleJDK 11とOracleJDK 17がサポートされています。
OracleJDK 8はサポートされていません。
OpenJDK 8u352以降、OpenJDK 11.0.17以降、およびOpenJDK 17.0.5以降がサポートされています。
OracleJDK 8はサポートされていません。
OracleJDK 11.0.21以降、およびOracleJDK 17.0.9以降がサポートされています。
async_profilerエンジン
OpenJDK 8、OpenJDK 11、OpenJDK 17、OracleJDK 8、OracleJDK 11、およびOracleJDK 17がサポートされています。
OpenJDK 8、OpenJDK 11、OpenJDK 17、OracleJDK 8、OracleJDK 11、およびOracleJDK 17がサポートされています。
リソース消費の説明
ほとんどのシナリオでは、Javaプログラムのパフォーマンスオーバーヘッドは5% 未満です。
ステップ1: Logtail設定の作成
にログインします。Simple Log Serviceコンソール.
[ログアプリケーション] セクションで、[インテリジェントO&M] タブをクリックします。 次に、[フルスタックの表示] をクリックします。
[Simple Log Serviceのフルスタックの観察可能性] ページで、管理するインスタンスをクリックします。
左側のナビゲーションウィンドウで、[パフォーマンスモニタリング] をクリックします。
インスタンスでパフォーマンスモニタリングを初めて使用する場合は、[有効化] をクリックします。
左側のナビゲーションツリーで、[データインポート] をクリックします。 [データアクセス設定] ページで、[パフォーマンスモニタリング] セクションの [共通プッシュインポート] を見つけます。
このタイプのパフォーマンスデータのLogtail設定を初めて作成するときは、スイッチをオンにして設定ページに移動します。 Logtail設定を作成した場合は、アイコンをクリックして
設定ページに移動します。
マシングループを作成します。
マシングループが利用可能な場合は、[既存のマシングループを使用] をクリックします。
使用可能なマシングループがない場合は、次の手順を実行します。
サーバータイプを確認します。
Simple Log Serviceと同じAlibaba Cloudアカウントに属するElastic Compute Service (ECS) インスタンスを使用している場合は、[ECSインスタンス] タブをクリックし、[インスタンスとECSインスタンスの手動選択] を選択し、[作成] をクリックします。
詳細については、「ECSインスタンスへのLogtailのインストール」をご参照ください。
サーバーが別のAlibaba Cloudアカウントに属するECSインスタンス、サードパーティのクラウドサービスプロバイダーが提供するサーバー、または自己管理データセンターにデプロイされているサーバーの場合、サーバーにLinux Logtail V1.7以降を手動でインストールする必要があります。 詳細については、「LinuxサーバーへのLogtailのインストール」をご参照ください。
重要Logtailを手動でインストールした後、サーバーのユーザー識別子を設定する必要があります。 詳細については、「ユーザー識別子の設定」をご参照ください。
Kubernetesクラスターを使用する場合は、「Kubernetesリソースに関するモニタリングデータの収集」の手順に従ってLogtailコンポーネントをインストールします。
Logtailをインストールしたら、[インストールの完了] をクリックします。
[マシングループの作成] ステップで、[名前] パラメーターを設定し、[次へ] をクリックします。
Simple Log Serviceでは、IPアドレスベースのマシングループとカスタム識別子ベースのマシングループを作成できます。 詳細については、「IPアドレスベースのマシングループの作成」および「カスタム識別子ベースのマシングループの作成」をご参照ください。
重要KubernetesクラスターにLogtailをインストールすると、{instanceId}-{clusterId}-k8s-cluster形式のマシングループが自動的に生成されます。 このステップはスキップできます。
[マシングループの設定] ステップで、サーバーを [ソースサーバーグループ] セクションから [応用サーバーグループ] セクションに移動し、[次へ] をクリックします。
重要マシングループを作成した直後にマシングループを有効にすると、マシングループのハートビートステータスがFAILになる可能性があります。 この問題は、マシングループがSimple Log Serviceに接続されていないために発生します。 この問題を解決するには、[自動再試行] をクリックします。 問題が解決しない場合は、Logtailマシングループにハートビートがない場合はどうすればよいですか?
[データソースの指定] ステップで、パラメーターを設定し、[完了] をクリックします。 下表に、各パラメーターを説明します。
パラメーター
説明
設定名
Logtail設定の名前。 カスタム名を入力することができます。
クラスター
クラスターの名前。 カスタム名を入力することができます。
このパラメーターを設定すると、Simple Log Serviceは、Logtail設定を使用して収集されたパフォーマンスデータに
cluster=<Cluster name>
タグを追加します。重要クラスター名が一意であることを確認してください。 そうしないと、データの競合が発生する可能性があります。
アドレス
データ収集のアドレス。 デフォルト値は
http://:4040
で、4040はPyroscopeのデフォルトポートです。 デフォルト値を保持する場合、HTTPサーバーはローカルアドレスを使用します。ECSインスタンスを使用する場合は、次の形式で値を指定します。
ECSインスタンスのIPアドレス: 4040
。Kubernetesクラスターにあるサーバーを使用する場合は、値を
logtail-kubernetes-metrics.sls-monitoring:4040
に設定します。サードパーティのクラウドサービスプロバイダーまたはデータセンターのサーバーを使用する場合は、次の形式で値を指定します。
サーバーのIPアドレス: 4040
。
Endpoint
Pyroscopeのデフォルトのエンドポイント。 デフォルト値:
/ingest
。読み取りタイムアウト期間
データ読み取り操作のタイムアウト期間。 デフォルト値は 10 です。 単位は秒です。
最大ボディサイズ
収集できるデータの最大サイズ。
設定後、Simple Log Serviceは自動的にMetricstoreなどのアセットを作成します。 詳細については、「アセット」をご参照ください。
ステップ2: Javaエージェントをダウンロードする
中国のリージョン
wget https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/jvm/continuous-profile-collector-agent-1.9.0.jar
中国以外のリージョン
wget https://logtail-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/jvm/continuous-profile-collector-agent-1.9.0.jar
手順3: パフォーマンスデータをプッシュするJavaプログラムの設定
JVMパラメーターを使用したJavaプログラムの設定
<g id="1" type="code" text="code id=" 091cded07dzry "outputclass=" language-plaintex "data-tag=" codeblock "code=" java \
-Dprofiling.app.name=your_service_name \
-Dprofiling.agent.upload.server="http://{host }:{ port}" \
-Dprofiling.cpu.engine={engine} \
-javaagent:{javaagentのパス} \
-jar demo.jar "uuid=" lnlbgqkf2xownz3qczq "title=" "">java \
-Dprofiling.app.name=your_service_name \
-Dprofiling.agent.upload.server="http://{host }:{ port}" \
-Dprofiling.cpu.engine={engine} \
-javaagent:{javaagentのパス} \
-jarデモ. jar
パラメーター | 説明 |
profiling.app.name | サービスの名前です。 |
profiling.agent.upload.server | データのアップロードのアドレス。
|
profiling.cpu.engine | CPUホットスポットの監視に使用されるエンジン。 デフォルト値:off 有効な値: auto、async_profiler、jfr、off。 値offは、CPUホットスポット監視が無効であることを指定します。 その他の値は、CPUホットスポット監視を有効にすることを指定します。 値をautoに設定することを推奨します。 |
環境変数を使用してJavaプログラムを構成する
<g id="1" type="code" text="code id=" 091d05ee7dfxq "outputclass=" language-plaintext "data-tag=" codeblock "code=" export PROFILING_APP_NAME="your_service_name"
export PROFILING_AGENT_UPLOAD_SERVER="http://{host }:{ port}"
export PROFILING_CPU_ENGINE="{engine}"
エクスポートPROFILING_ALLOC_ENGINE="{engine}"
"uuid=" lnlc7riswp9g5pifyj "title=" "">export PROFILING_APP_NAME="your_service_name"
export PROFILING_AGENT_UPLOAD_SERVER="http://{host }:{ port}"
export PROFILING_CPU_ENGINE="{engine}"
export PROFILING_ALLOC_ENGINE="{engine}"
パラメーター | 説明 |
PROFILING_APP_NAME | サービスの名前です。 |
PROFILING_AGENT_UPLOAD_SERVER | データのアップロードのアドレス。
|
PROFILING_CPU_ENGINE | CPUホットスポットの監視に使用されるエンジン。 デフォルト値:off 有効な値: auto、async_profiler、jfr、off。 値offは、CPUホットスポット監視が無効であることを指定します。 その他の値は、CPUホットスポット監視を有効にすることを指定します。 値をautoに設定することを推奨します。 |
アドレスをhttpで開始しないでください。 システムは自動的にhttpプレフィックスをアドレスに追加します。
スラッシュ (/) でアドレスを終了しないでください。 システムは自動的にスラッシュ (/) をアドレスに追加します。
none: ファイルは圧縮されておらず、接尾辞は. jfrです。
gzip: ファイルは圧縮されており、接尾辞は .jfr.gzipです。
空: ""
単一の糸: 123
複数のスレッド: 122,123
補足
JVMパラメーター | 環境変数 | 説明 |
profiling.app.name | PROFILING_APP_NAME | アプリケーションの名前。 |
profiling.agent.upload.server | PROFILING_AGENT_UPLOAD_SERVER | Java Flight Recorder (JFR) ファイルがアップロードされるサーバーのアドレス。 デフォルト値: http:// localhost:4040 |
profiling.agent.timeout | PROFILING_AGENT_TIMEOUT | JFRファイルをアップロードするためのタイムアウト時間。 デフォルト値は 10 です。 単位は秒です。 |
profiling.agent.ingest.max.tries | PROFILING_AGENT_INGEST_MAX_TRIES | JFRファイルのアップロードに許可される再試行の最大数。 デフォルト値:2 |
profiling.app.http.headers | PROFILING_APP_HTTP_HEADERS | JFRファイルをアップロードするときに使用されるHTTPヘッダー。 このパラメーターはデフォルトで空となります。 例: SESSION_ID=1111;XXX=YYY。 |
profiling.app.labels | PROFILING_APP_ラベル | JFRファイルをアップロードするときにJFRファイルに追加されるタグ。 このパラメーターはデフォルトで空となります。 例: |
profiling.agent.log.level | PROFILING_AGENT_LOG_LEVEL | ログレベル。 デフォルト値: info 有効な値: info、debug、error。 |
profiling.agent.log.file | PROFILING_AGENT_LOG_FILE | ログファイルへのパス。 値を /path/to/profiling.logに設定できます。 デフォルトでは、パスはJava stdoutとstderrに書き込まれます。 |
profiling.period | PROFILING_PERIOD | パフォーマンスデータがアップロードされる間隔。 デフォルト値は 1 です。 単位は分です。 |
profiling.de lay | PROFILING_DELAY | パフォーマンス監視の待ち時間。 デフォルト値: 0。これは、パフォーマンス監視エンジンが有効になった直後にパフォーマンス監視が開始されることを示します。 値をNに設定すると、パフォーマンスモニタリングエンジンが有効になってからN秒後にパフォーマンスモニタリングが開始されます。 |
profiling.start.at.zero.second | PROFILING_START_AT_ZERO_SECOND | 毎分0秒でパフォーマンスモニタリングを開始するかどうかを指定します。 毎分0秒でパフォーマンスモニタリングを開始する場合は、値をtrueに設定します。 たとえば、値がtrueに設定されていて、現在の時刻が現在の分の30秒である場合、システムはパフォーマンスモニタリングを開始する前に30秒間自動的に待機します。 デフォルト値:false |
profiling.compression.mode | PROFILING_COMPRESSION_MODE | 圧縮モード。 デフォルト値 : none。 有効な値: gzipとnone。 |
profiling.trigger.mode | PROFILING_TRIGGER_MODE | トリガーモード。 定期的または1回のパフォーマンスモニタリングをトリガーできます。 デフォルト値: periodic。 有効な値: periodicとapi。 エージェントモードでは、値を定期的に設定することを推奨します。 |
profiling.output.format | PROFILING_OUTPUT_FORMAT | ファイルの形式。 デフォルト値: jfr。 有効な値: jfrおよびcollapsed。 |
profiling.cpu.engine | PROFILING_CPU_ENGINE | CPUホットスポットの監視に使用されるエンジン。 デフォルト値:off 有効な値: auto、async_profiler、jfr、off。 値offは、CPUホットスポット監視が無効であることを指定します。 その他の値は、CPUホットスポット監視を有効にすることを指定します。 値をautoに設定することを推奨します。 |
profiling.cpu.interval | PROFILING_CPU_INTERVAL | CPUホットスポットの監視が実行される間隔。 小さな値はオーバーヘッドを増加させる。 デフォルト値は 10 です。 単位:ミリ秒。 |
profiling.wallclock.engine | PROFILING_WALLCLOCK_ENGINE | ウォールクロックのホットスポットの監視に使用されるエンジン。 デフォルト値:off 有効な値: auto、async_profiler、およびoff。 値offは、壁時計ホットスポットの監視が無効にされることを指定する。 他の値は、壁時計ホットスポットの監視が有効にされることを指定する。 値をoffに設定することを推奨します。 |
profiling.wallclock.interval | PROFILING_WALLCLOCK_INTERVAL | ウォールクロックのホットスポットの監視が実行される間隔。 小さな値はオーバーヘッドを増加させる。 デフォルト値は 20 です。 単位:ミリ秒。 |
profiling.wallclock.thread.filter | PROFILING_WALLCLOCK_THREAD_FILTER | ウォールクロックのホットスポットの監視に使用されるスレッドフィルタ。 デフォルト値: 0。これは、スレッドが関与していないことを示します。 値の指定方法の例を次に示します。 糸の範囲: 134に122 |
profiling.wallclock.threads.per.tick | PROFILING_WALLCLOCK_THREADS_PER_TICK | ウォールクロックのホットスポットを監視するために使用されるスレッドの最大数。 デフォルト値: 8。 |
profiling.alloc.engine | PROFILING_ALLOC_ENGINE | Allocホットスポット監視に使用されるエンジン。 デフォルト値:off 有効な値: auto、async_profiler、jfr、off。 Allocホットスポット監視は、メモリ要求ホットスポットの監視を指す。 値offは、Allocホットスポット監視が無効であることを指定します。 その他の値は、Allocホットスポット監視を有効にすることを指定します。 値をautoに設定することを推奨します。 |
profiling.alloc.interval | PROFILING_ALLOC_INTERVAL | Allocホットスポット監視が実行される間隔。 小さな値はオーバーヘッドを増加させる。 デフォルト値: 256 単位: キロバイト。 |
profiling.jfr.max.size | PROFILING_JFR_MAX_SIZE | JFRファイルのサイズの上限。 サイズが上限に達すると、ファイル内のデータは自動的に破棄されます。 デフォルト値: 64m。 値の例: 256kおよび10m。 |
profiling.jfr.max.age | PROFILING_JFR_MAX_AGE | JFRファイルの年齢の上限。 年齢が上限に達すると、ファイル内のデータは自動的に破棄されます。 デフォルト値: 10m。 値の例: 1m、1h、および1d。 |
profiling.jfr.max.stack.de pth | PROFILING_JFR_MAX_STACK_DEPTH | JFRサンプリング中に許可される最大スタック深度。 デフォルト値: 64。 |
次のステップ
JavaプログラムからFull-stack Observabilityにパフォーマンスデータを収集した後、パフォーマンス監視機能を使用してパフォーマンスの問題をトラブルシューティングできます。 詳細については、「データクエリ」および「データ比較」をご参照ください。