监控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_bytestype: GAUGEattrNameSnakeCase: true- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'name: os_$1type: GAUGEattrNameSnakeCase: 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时间都展示出来.