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配置
在日誌應用地區的智能營運頁簽下,單擊全棧可觀測。
在SLS全棧可觀測頁面,單擊目標執行個體。
在左側導覽列中,單擊效能監控。
首次在該執行個體中使用效能監控時,請單擊立即開啟。
在左側導覽列中,單擊資料接入,然後在資料接入配置頁面,找到通用推送接入。
首次建立目標監控項的接入配置時,開啟建立開關,可進入配置頁面。如果您已建立過接入配置,則單擊
表徵圖,可進入配置頁面。建立機器組。
如果您已有可用的機器組,請單擊使用現有機器組。
如果您還沒有可用的機器組,請執行以下操作。
確認您的伺服器類型。
如果是同帳號下的ECS,請在ECS機器頁簽中,通過手動選擇執行個體方式選擇目標ECS執行個體,單擊建立。
具體操作,請參見安裝Logtail(ECS執行個體)。
如果是與Log Service屬於不同帳號的ECS、其他雲廠商的伺服器和自建IDC,請您在伺服器上手動安裝Linux Logtail 1.7及以上版本。具體操作,請參見安裝Logtail(Linux系統)。
重要手動安裝Logtail後,您必須在該伺服器上手動設定使用者標識。具體操作,請參見配置使用者標識。
如果是Kubernetes叢集,請參見接入Kubernetes資源監控資料安裝Logtail組件。
安裝完成後,單擊確認安裝完畢。
在建立機器組頁面,輸入名稱,單擊下一步。
Log Service支援建立IP地址機器組和使用者自訂標識機器組,詳細參數說明請參見建立IP地址機器組和建立使用者自訂標識機器組。
重要如果是在Kubernetes叢集安裝Logtail,會自動產生名為{instanceId}-{clusterId}-k8s-cluster的機器組,請跳過此步驟。
在機器組配置中,將目標機器組從源機器組移動到應用機器組,然後單擊下一步。
重要如果建立機器組後立刻應用,可能因為串連未生效,導致心跳為FAIL,您可單擊自動重試。如果還未解決,請參見Logtail機器組無心跳進行排查。
在資料來源設定設定精靈中,配置如下參數,然後單擊完成。
參數
說明
配置名稱
自訂設定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 | 資料上傳地址。
|
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 | 資料上傳地址。
|
PROFILING_CPU_ENGINE | CPU熱點剖析引擎,預設值:off,可選值:auto、async_profiler、jfr、off。 off表示不開啟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 | 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_LABELS | 上傳JFR檔案時的標籤,預設值:空。例如 |
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。 |
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,不剖析任何線程。 可選值: 線程範圍: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。 |