監控java程式啟動時的CPU使用情況
背景
想關注一下 java 程式啟動過程中的CPU整體使用
以及啟動過程中GC的次數和GC的好是等情況
之前使用actuator的方式這裡行不通
因為還沒有最終暴露服務
使用agent的方式雖然那可以暴露啟動過程
但是也存在一些其他的問題
比如無法健康hikari,redis等的情況
這裡簡單總結一些使用,不做展開
啟動指令碼的處理
在java 的啟動指令碼里面新增內容:
-javaagent:./jmx_prometheus_javaagent-0.17.2.jar=8080:simple-config.yml
需要注意 agent 可以從github 上面下載
配置檔案一般可以為:
=lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:
- pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'
name: os_$1_bytes
type: GAUGE
attrNameSnakeCase: true
- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
name: os_$1
type: GAUGE
attrNameSnakeCase: true
資料檢視
啟動服務後可以透過 8080 埠檢視暴露出來的資料
注意這裡沒有使用https等方式,比較簡單
prometheus & grafana
直接二進位制部署就可以
也可以使用docker的方式.
部署之後需要增加prometheus的配置.
prometheus的配置
- job_name: "JVM exporter"
static_configs:
- targets: ["172.24.110.207:8080","172.24.110.209:8080"]
重啟服務:
nohup ./prometheus --storage.tsdb.retention.time=90d
--storage.tsdb.path="/grafana/data/" --storage.tsdb.retention.size=100GB \
--web.listen-address="0.0.0.0:9095" 2>&1 >/dev/null &
grafana的設定
1. 新增資料來源
2. 新增圖表
可以新增一個 time serial 的圖表內容
3. 資料來源選擇 prometheus,然後code 輸入
process_cpu_seconds_total{job="JVM exporter"}
這個數值就是 JVM 啟動時的CPU消耗量 總時間
4. 資料來源選擇: prometheus
計算公式:
jvm_gc_collection_seconds_sum
然後在options 裡面選擇 legend
輸入 {{instance}}/{{gc}}
會降不同GC時間都展示出來.