你值得睡个好觉
大家平时研发已经非常辛苦了,服务上现网时,还要焦虑现网运行是否稳定,焦虑得晚上睡不着觉。有了sherlock,你值得睡个好觉 !!!
启用sherlock可以保留openGemini服务在发生一些性能瓶颈的时候保留现场,可以通过火焰图找到关键的性能瓶颈在哪,方便分析原因和性能优化。
sherlock目前具备三项功能:
- 根据规则自动导出
heap内存占用的火焰图。 - 根据规则自动导出
cpu占用的火焰图。 - 根据规则自动导出
goroutines堆栈的火焰图。
第一步:准备配置文件
部署openGemini集群的拓扑文件中添加如下配置项,即可开启sherlock服务。
其他完整的配置参数参考:github.com/openGemini/…
# topology.yaml
......
server_configs:
ts-meta:
sherlock.sherlock-enable: true
sherlock.collect-interval: '10s'
sherlock.cpu-max-limit: 95
sherlock.dump-path: "/tmp/sherlock"
sherlock.max-num: 32 # 火焰图文件最多保存32个
sherlock.max-age: 7 # 最多保存7天
sherlock.cpu.enable: true
sherlock.cpu.min: 30
sherlock.cpu.diff: 100
sherlock.cpu.abs: 70
sherlock.cpu.cool-down: '10m'
sherlock.memory.enable: true
sherlock.memory.min: 30
sherlock.memory.diff: 50
sherlock.memory.abs: 60
sherlock.memory.cool-down: "10m"
sherlock.goroutine.enable: true
sherlock.goroutine.min: 15000
sherlock.goroutine.diff: 20
sherlock.goroutine.abs: 20000
sherlock.goroutine.max: 50000
sherlock.goroutine.cool-down: "10m"
ts-sql:
# 同上ts-meta
ts-store:
# 同上ts-meta
......
就以cpu为例子,满足以下任意条件,系统会自动抓取profile,并导出到 dump-path:
${current} > {$min}% && ${current} > ( 100 + ${diff} )% * ${average}${current} >{$abs}%
参数配置解释:
current: 当前CPU使用率。 average: 前10次采集的CPU使用率的平均值(注意:这10个数据,每个数据的值都需要 >= ${min})。 min/diff/abs: 分别为cpu下面的配置参数。
cool-down 的时间间隔,是两次dump操作之间最小时间间隔,避免频繁profiling对性能产生的影响。
注意:sherlock.goroutine有个max参数表示:如果goroutine的数量超过了max,则不导出火焰图,避免STW对性能产生较大影响。
SWT: Stop the World 的缩写,goroutine越多,导出火焰图会导致STW越长,可能会引发性能问题。不过这个问题已经在go1.19得到了优化。参考此CL:
第二步:启动集群
gemix cluster install gemini_demo v1.1.1 ./topology.yaml --skip-create-user -u root -p
具体细节请参考文章:docs.opengemini.org/zh/guide/de…
第三步:导出 /tmp/sherlock 目录下的火焰图文件
如果/tmp目录下没有火焰图文件,应该是业务压力不大,集群健康状态正常。一般可以通过grafana监控面板,查看节点的CPU和内存等信息是否有异常增高的趋势。如果有,并且超过了配置文件中的配置的阈值,则会自动在 /tmp/sherlock 目录下生成火焰图文件。文件名规则如下:
- CPU:
{进程名}.cpu.{时间}.pb.gz,e.g.ts-sql.cpu.20230321113534.241.pb.gz - Heap:
{进程名}.mem.{时间}.pb.gz,e.g.ts-store.mem.20230321113534.241.pb.gz - Goroutine:
{进程名}.goroutine.{时间}.pb.gz,e.g.ts-store.goroutine.20230321113534.241.pb.gz
第四步:使用 go tool 性能分析
执行如下命令可以使用 go自带的web页面分析火焰图等数据:
go tool pprof -http=:8888 ts-sql.cpu.20230321113534.241.pb.gz
效果图:
探索更多
- 集群监控: docs.opengemini.org/zh/guide/ma…
- 配置文件:docs.opengemini.org/zh/guide/re…
- gemix工具共建:github.com/openGemini/…
openGemini官网:www.openGemini.org
Star for me😊:github.com/openGemini
openGemini公众号:
欢迎关注~ 诚邀你加入 openGemini 社区,共建、共治、共享未来!