全部產品
Search
文件中心

:接入阿里雲JavaAgent上報的Java程式效能資料

更新時間:Jun 30, 2024

Continuous Profiler Agent為阿里雲JVM團隊自研效能採集工具,具有高效能、穩定、大規模生產驗證等優勢。您可以通過Logtail接入Continuous Profiler Agent上報的Java程式效能資料到全棧可觀測應用中,進行可視化的效能監控和分析。

前提條件

已建立全棧可觀測執行個體。具體操作,請參見建立執行個體

使用限制

  • Logtail為Linux Logtail 1.7及以上版本。

  • 支援CentOS、Redhat、Alibaba Cloud Linux、Ubuntu、Debian發行版等作業系統,核心版本需為2.6.32-431.23.3.el6.x86_64及以上版本,支援glibc和musl libc。

  • JDK版本

    引擎類型

    CPU

    記憶體

    AUTO引擎

    • OpenJDK 8u272及以上、JDK 11、JDK 17都支援

    • OracleJDK 11、OracleJDK 17都支援

    • OracleJDK 8不支援

    • OpenJDK8u352及以上、OpenJDK 11.0.17及以上、OpenJDK 17.0.5及以上都支援

    • OracleJDK8不支援

    • OracleJDK 11.0.21及以上、OracleJDK 17.0.9及以上都支援

    async_profiler引擎

    所有OpenJDK/OracleJDK 8、11、17都支援

    所有OpenJDK/OracleJDK 8、11、17都支援

效能消耗說明

在一般壓力情況下(也就是生產環境的常見壓力),Java程式效能剖析的開銷低於5%。

步驟一:建立Logtail配置

  1. 登入Log Service控制台

  2. 日誌應用地區的智能營運頁簽下,單擊全棧可觀測

  3. SLS全棧可觀測頁面,單擊目標執行個體。

  4. 在左側導覽列中,單擊效能監控

    首次在該執行個體中使用效能監控時,請單擊立即開啟

  5. 在左側導覽列中,單擊資料接入,然後在資料接入配置頁面,找到通用推送接入

    首次建立目標監控項的接入配置時,開啟建立開關,可進入配置頁面。如果您已建立過接入配置,則單擊建立表徵圖,可進入配置頁面。

  6. 建立機器組。

    • 如果您已有可用的機器組,請單擊使用現有機器組

    • 如果您還沒有可用的機器組,請執行以下操作。

      1. 確認您的伺服器類型。

        • 如果是同帳號下的ECS,請在ECS機器頁簽中,通過手動選擇執行個體方式選擇目標ECS執行個體,單擊建立

          具體操作,請參見安裝Logtail(ECS執行個體)

        • 如果是與Log Service屬於不同帳號的ECS、其他雲廠商的伺服器和自建IDC,請您在伺服器上手動安裝Linux Logtail 1.7及以上版本。具體操作,請參見安裝Logtail(Linux系統)

          重要

          手動安裝Logtail後,您必須在該伺服器上手動設定使用者標識。具體操作,請參見配置使用者標識

        • 如果是Kubernetes叢集,請參見接入Kubernetes資源監控資料安裝Logtail組件。

      2. 安裝完成後,單擊確認安裝完畢

      3. 建立機器組頁面,輸入名稱,單擊下一步

        Log Service支援建立IP地址機器組和使用者自訂標識機器組,詳細參數說明請參見建立IP地址機器組建立使用者自訂標識機器組

        重要

        如果是在Kubernetes叢集安裝Logtail,會自動產生名為{instanceId}-{clusterId}-k8s-cluster的機器組,請跳過此步驟。

  7. 機器組配置中,將目標機器組從源機器組移動到應用機器組,然後單擊下一步

    重要

    如果建立機器組後立刻應用,可能因為串連未生效,導致心跳為FAIL,您可單擊自動重試。如果還未解決,請參見Logtail機器組無心跳進行排查。

  8. 資料來源設定設定精靈中,配置如下參數,然後單擊完成

    參數

    說明

    配置名稱

    自訂設定Logtail採集配置名稱。

    叢集

    自訂設定叢集的名稱。

    設定該參數後,Simple Log Service會為通過該Logtail採集配置採集到的效能監控資料添加cluster=叢集名稱的標籤。

    重要

    請確保該叢集名稱唯一,否則可能出現資料衝突。

    地址

    設定採集地址。預設為http://:4040,表示以本地地址啟動HTTP Server,4040為Pyroscope的預設連接埠。

    • 如果是ECS,需配置為目標ECS的IP地址:4040

    • 如果是Kubernetes叢集,需配置為logtail-kubernetes-metrics.sls-monitoring:4040

    • 如果是其他雲廠商的伺服器和自建IDC,需配置為目標伺服器的IP地址:4040

    端點

    Pyroscope的預設端點,預設值為/ingest

    讀取逾時時間

    資料讀取逾時時間,預設為10秒。

    最大Body大小

    支援的最大Body大小。

設定完成後,Simple Log Service將自動產生Metricstore等資產。更多資訊,請參見資產說明

步驟二 下載Java Agent

  • 中國地區

    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

步驟三: 配置Java程式推送效能資料

  • JVM參數方式

  • java \
    -Dprofiling.app.name=your_service_name \
    -Dprofiling.agent.upload.server="http://{host}:{port}" \
    -Dprofiling.cpu.engine={engine} \
    -javaagent:{path for javaagent} \
    -jar demo.jar

    參數

    說明

    profiling.app.name

    服務名稱。

    profiling.agent.upload.server

    資料上傳地址。

    • 如果是ECS,需配置為目標ECS的IP地址:4040

    • 如果是Kubernetes叢集,需配置為logtail-kubernetes-metrics.sls-monitoring:4040

    • 如果是其他雲廠商的伺服器和自建IDC,需配置為目標伺服器的IP地址:4040

    profiling.cpu.engine

    CPU熱點剖析引擎,預設值:off,可選值:auto、async_profiler、jfr、off。

    off表示不開啟CPU熱點剖析,其他值表示開啟。建議選擇auto。

  • 環境變數方式

  • 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

    資料上傳地址。

    • 如果是ECS,需配置為目標ECS的IP地址:4040

    • 如果是Kubernetes叢集,需配置為logtail-kubernetes-metrics.sls-monitoring:4040

    • 如果是其他雲廠商的伺服器和自建IDC,需配置為目標伺服器的IP地址:4040

    PROFILING_CPU_ENGINE

    CPU熱點剖析引擎,預設值:off,可選值:auto、async_profiler、jfr、off。

    off表示不開啟CPU熱點剖析,其他值表示開啟。建議選擇auto。

    備忘說明

    JVM 參數

    環境變數

    說明

    profiling.app.name

    PROFILING_APP_NAME

    應用程式名稱

    profiling.agent.upload.server

    PROFILING_AGENT_UPLOAD_SERVER

    JFR檔案上傳伺服器位址,預設值:http://localhost:4040

    • 不以http開頭,系統將自動添加http首碼。

    • 不以正斜線(/)結束,系統將自動添加正斜線(/)。

    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_LABELS

    上傳JFR檔案時的標籤,預設值:空。例如env=dev;lang=java;biz=member。

    profiling.agent.log.level

    PROFILING_AGENT_LOG_LEVEL

    記錄層級,預設值:info,可選值:info、debug、error。

    profiling.agent.log.file

    PROFILING_AGENT_LOG_FILE

    記錄檔路徑,預設值:輸出到Java的標準輸出,可選值:/path/to/profiling.log。

    profiling.period

    PROFILING_PERIOD

    上傳周期,即每隔多久上傳一次剖析資料。預設值:1分鐘。

    profiling.delay

    PROFILING_DELAY

    剖析延遲時間,預設值:0,啟動後馬上開始剖析。其中值表示延遲對應秒數再開啟剖析。

    profiling.start.at.zero.second

    PROFILING_START_AT_ZERO_SECOND

    如果希望在每分鐘的0秒開始剖析,則設定為true。例如設定為true,且目前時間是30秒,則會自動等待30後後再開啟剖析。

    預設值:false。

    profiling.compression.mode

    PROFILING_COMPRESSION_MODE

    壓縮方式,預設值:none,可選值:gzip、none。

    • none:檔案尾碼為.jfr。

    • gzip:檔案尾碼為.jfr.gzip。

    profiling.trigger.mode

    PROFILING_TRIGGER_MODE

    觸發模式,自動周期性觸發或者單次觸發。預設值:periodic, 可選值:periodic、api。

    agent模式適合periodic。

    profiling.output.format

    PROFILING_OUTPUT_FORMAT

    檔案格式,預設值:jfr,可選值:jfr、collapsed。

    profiling.cpu.engine

    PROFILING_CPU_ENGINE

    CPU熱點剖析引擎,預設值:off,可選值:auto、async_profiler、jfr、off。

    off表示不開啟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,不剖析任何線程。

    可選值:

    • 空:""

    • 單個線程:123

    • 多個線程:122,123

    線程範圍:122-134。

    profiling.wallclock.threads.per.tick

    PROFILING_WALLCLOCK_THREADS_PER_TICK

    牆鐘熱點剖析每次剖析的線程數上限,預設值:8。

    profiling.alloc.engine

    PROFILING_ALLOC_ENGINE

    Alloc(記憶體申請)熱點剖析引擎,預設值:off,可選值:auto、async_profiler、jfr、off。

    off表示不開啟Alloc熱點剖析,其他值表示開啟,建議選擇auto。

    profiling.alloc.interval

    PROFILING_ALLOC_INTERVAL

    記憶體申請熱點剖析的間隔, 值越小開銷越大。預設值256,單位:kilo bytes。

    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.depth

    PROFILING_JFR_MAX_STACK_DEPTH

    JFR採樣時的棧深度限制,預設值:64。

後續步驟

接入效能資料後,您可以通過效能監控探索功能進行效能問題排查。具體操作,請參見資料查詢資料對比