監控java程式啟動時的CPU使用情況

济南小老虎發表於2024-05-01

監控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時間都展示出來.

image

相關文章