前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线上服务负载异常排查

线上服务负载异常排查

作者头像
用户1093396
发布2022-03-14 14:33:26
4920
发布2022-03-14 14:33:26
举报
文章被收录于专栏:TIGERB的技术博客

前言

除了解决业务Bug之外,工作中通常我们还会面临两类问题:

  • 线上服务负载异常,比如CPU负载异常飙高
  • 线上服务内存持续增长,存在泄漏

一般我们会通过各种监控、报警系统,发现和定位问题,关于如何搭建服务监控可以参考之前的文章《Go服务监控搭建入门》。但是呢,一些特殊情况,比如创业初期或者拥有大量技术债的系统,监控可能不够完善。所以今天就来看看这种情况下,如何定位服务负载异常的原因。

首先关于「负载异常」的问题,大都肯定都知道使用top或者htop等命令定位到某个进程或线程,好,问题来了:

如何定位到是哪个具体的函数导致的服务负载异常呢?

介绍一个利器perf

本文使用docker来演示perf的用法,可以直接使用我编排好的docker compose工程(一个模拟http服务调用grpc服务的演示项目) https://github.com/TIGERB/easy-tips/blob/master/docker/go/docker-compose.yaml

启动服务

代码语言:javascript
复制
// -d daemon守护模式
docker-compose up -d

进入容器

代码语言:javascript
复制
docker exec -it http-demo sh

安装perf

代码语言:javascript
复制
// 因为我这里使用的alpine,所以用apk安装,centos安装方式 yum install perf
apk add --update perf

模拟请求

代码语言:javascript
复制
siege -c 3 -t 30S "http://localhost:6060/v1/demo"

采样进程(当前目录会生成一个perf.data文件)

代码语言:javascript
复制
perf record -F 99 -p 6 -g sleep 10
释义:
-F 频率 每秒采样多少次
-p 进程 进程id
-g 记录调用栈
sleep 采样多少秒

分析CPU采样结果

代码语言:javascript
复制
perf report -n --stdio

除此之外,查看实时top函数

代码语言:javascript
复制
perf top -p 6

生成火焰图

如果上述的堆栈信息等还满足不了你,我们还可以基于采样过程生成的perf.data文件生成火焰图:

  1. 使用perf script命令转换上一步得到的perf.data文件,为下面使用火焰图工具生成火焰图做准备:
代码语言:javascript
复制
perf script -i yourpath/perf.data &> yourpath/perf.script
  1. 获取火焰图工具:
代码语言:javascript
复制
git clone git@github.com:brendangregg/FlameGraph.git && cd ./FlameGraph
  1. 使用火焰图工具FlameGraph下的工具stackcollapse-perf.pl进一步处理perf.script文件:
代码语言:javascript
复制
./stackcollapse-perf.pl yourpath/perf.script &> yourpath/perf.stackcollapse
  1. 生成最终的火焰图:
代码语言:javascript
复制
./flamegraph.pl yourpath/perf.stackcollapse > yourpath/perf.svg
代码语言:javascript
复制
关于我的常用画图软件:

1. Balsamiq Mockups 3
2. Processon
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TIGERB的技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 介绍一个利器perf
    • 生成火焰图
    相关产品与服务
    容器镜像服务
    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档