cpu使用率_Go服务在容器内CPU使用率异常问题排查手记

e1ef103581e2bc2dec67a765f1023132.png

导语

本文介绍了公司“云化服务”的大背景下,将一个Go服务迁移至公司的基于K8s+docker的容器云平台,使用火焰图进行性能排查和优化方面的实践。欢迎在留言区进行阅读探讨。

背景

在公司“云化服务”的大背景下,将一个Go服务迁移至公司的基于K8s+docker的容器云平台。 在迁移过程中发现服务在Docker容器内的CPU使用率异常的问题。 针对此问题,进行了一些排查和优化的实践。 本文将重现排查过程以及优化方案,希望能为读者提供一些参考。

问题现象

在将服务由物理机迁移至容器云计算平台过程中,发现CPU使用率远超预期。 该服务是一个Go编写的消息推送服务,其业务特点是:短时间内会推送大量消息,因此该服务的负载曲线会是一个类似方波的图形。 在迁移前预估业务高峰期的CPU使用率为20%,但是实际的CPU使用率远超预期,到达了70%,是预估值的3倍,如下图所示: ba35384fcd82f3676fb90f6a62ca3295.png 灰度迁移中容器内CPU使用率异常图 使用指令 pidstat -w 观察到线程切换次数也比较高,达到了千次/秒。

排查过程

1. 采样 在确认容器节点和物理机节点的请求量负载基本一致后,开始对容器节点进行性能排查。 Linux平台有很多性能分析工具像perf、systemtap等。Go的工具集非常丰富,相比于其他Linux工具,可以更加简便深入地进行分析调试。这里直接使用go tool pprof对服务进行profiling采样分析。

a) 首先在代码中开启pprof,对于具备http server的服务来说,仅需增加一行代码 import _ "net/http/pprof"

b) 访问 http://ip:port/debug/pprof/ 可以在浏览器中查看pprof采样得到的数据,使用命令行进行采样则更加方便 go tool pprof http://ip:port/debug/pprof/profile?seconds=30

8c93ffcf20fa05fc2da455ec6bf7ba50.png 命令行内查看pprof

c) 在pprof中输入指令web,即可生成一个函数调用链的CPU耗时分析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值