Go pprof 快速分析 CPU 高负载问题
公司一个同事使用 Go Websocket 开发了 k8s 在线调试服务,该服务也部署在 k8s 集群中,没几天运维那边通告说 cpu 100% 高负载了,还把限制的范围内的 cpu core 都干满了。由于那人休假,我帮忙处理下。
通常来说这类 cpu 高负载的问题相对好排查,多是 bug 造成的。像这个调试服务在一个量级请求完毕后,cpu 使用率居然还是爆满。???? 不用想,肯定是协程泄露了,造成了某个逻辑的忙轮询。
该服务在 k8s 集群中部署,没有接入 ingress,所以在有外网的 k8s node 上做了一个端口映射。这样开发机就可以 go tool pprof 外网地址。
还有一个好方法是我以前常用的,在 k8s node 上把 golang 的 pprof 可分析数据导入到文件里,然后把文件 post 到一个支持上传的服务,比如 http upload,后面大家就知道该怎么操作了。
下面是pprof生成的火焰图和调用链耗时图,很明显的看到 writeLoop 不断的调用 Close() 方法。
既然确定了问题,通过 pprof source 定位热点代码,为什么会不断调用 wsConn.Close()
呢 ?因为没有 return,既然已感知连接关闭,那么就应该 return 出去!!!
// xiaorui.ccTotal: 2.31s 1.35mins (flat, cum) 99.25%76 . . } 77 . . } 78 . . 79 . . // 发送协程 80 . . func (wsConn *WsConnection) wsWriteLoop() { 81 330ms 330ms defer fmt.Println("write exited") 82 . . for { 83 740ms 1.05mins select { 84 720ms 730ms case msg = <-wsConn.outChan: 85 . . if err = wsConn.socket.WriteMessage(msg.MessageType, msg.Data); err != nil { 86 . . log.Error("websocket write message error", err) 87 . . } 88 220ms 220ms case <-wsConn.closeChan: 89 300ms 16.21s wsConn.Close() 90 . . } 91 . . } 92 . . }
相比性能调优,这类由于 bug 引起的 cpu 高负载问题反而特别容易处理,基本上通过 pprof 看火焰图就可以快速定位问题。
Go pprof 快速分析 CPU 高负载问题相关推荐
- CPU高负载排查小技巧(2分钟速读版),细心的优化可能为公司节省一个亿!
女主宣言 服务优化是一个细心.漫长的过程,一个很小的优化不仅可以为用户带来更稳定更快速的互联网体验,也许还会为公司降低百万以上的成本.熟练掌握服务端排错技巧,已经是"匠心工程师"的 ...
- ORACLE 11g 通过ASH结合AWR实战解决cpu高负载的详细过程
ASH结合AWR实战解决oracle高负载 线上oracle数据库负载比较高,所以需要优化,一般进去看负载高的进程,如果是oracle进程,那么就是oracle运行 ...
- 又一次生产 CPU 高负载排查实践
本文经授权转载自微信公众号:crossoverJie 前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨. 其实早在去年我也处理 ...
- 高cpu_再一次生产 CPU 高负载排查实践
(给ImportNew加星标,提高Java技能) 作者:crossoverJie segmentfault.com/a/1190000019507028 前言 前几日早上打开邮箱收到一封监控报警邮件: ...
- java cpu io高_服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)...
关于top命令 经常问load average 参考:load average 定义(网易面试) 问题现象: 1,top命令查询服务器负载达到2.0-5之间,tomcat的cpu使用率达到104% l ...
- java获取cpu使用率_再一次生产 CPU 高负载排查实践
前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨. 其实早在去年我也处理过类似的问题,并记录下来:<一次生产 CPU 1 ...
- qt获取cpu使用率_又一次生产 CPU 高负载排查实践
以下文章来源于crossoverJie ,作者crossoverJie 前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨. 其 ...
- 如何查java当前负载_linux进程和线程排查 · 记一次JVM CPU高负载的排查办法
前言 通过本文,你将学会: 1.linux上进程及进程中线程排查的基本方法,如查看进程中的线程数 此文中的线程一般指轻量级进程. 查看所有进程信息 top -H 加上-H这个选项启动top,top一行 ...
- 成功解决ThinkPad T14 高负载下CPU降频问题
本人机器是ThinkPad T14 , CPU是 Intel i5-10210U,随着气温的升高,发现机器越来越卡,特别是在运行大型软件和处理大型文档的时候,看了下任务管理器,高负载时CPU不仅没有睿 ...
最新文章
- 计算机软件和硬件比较,软件与硬件RAID优劣之比较
- keil中文乱码解决和个人习惯字体设置
- D. Cut and Stick(Codeforces Round #716 (Div. 2))
- Codeforces Round #725 (Div. 3) G. Gift Set 二分
- 011 Android TabLayout+ViewPager实现顶部滑动效果(多个页面)
- 罗永浩回应被中消协点名;传前淘宝直播运营负责人因贪污被阿里通报;TypeScript 4.0 Beta发布​ | 极客头条...
- java格式化日期时分秒_java中的LocalDateTime
- python getopterror_python getopt抛出getopterror选项——mode不能有参数
- MDT错误之日志查看方法
- 004-集成maven和Spring boot的profile功能打包
- Mac OS Catalina 如何连接老旧的惠普 HP Laser Jet 1020 plus 打印机
- 单片机与触摸屏通信c语言,讲述如何实现单片机与触摸屏的通信
- 分享一个用turtle画的网易云logo
- 波峰波谷(凸点凹点)的检测算法
- orcale :SQL语句小测试select * from emp order by hiredate asc;
- Pro Tools播放引擎设置详解
- 点到点法式平面投影点的计算
- 手把手带你搭建一个简单的webpack脚手架(一)
- 风雨30年,电子表格惊人跨越,excel用户:表格都能生成软件了
- html 画梯形容器,css怎么画梯形?