19 | 如何通过监控找到性能瓶颈?
陶辉
该思维导图由 AI 生成,仅供参考
你好,我是陶辉。
从这一讲开始,我们将进入分布式系统层面,站在更宏观的角度去探讨系统性能的优化。
如果优化系统性能时,只是依据自己的经验,对感觉存在性能提升空间的代码,无一例外地做一遍优化,这既是一件事倍功半的事,也很容易遗漏下关键的优化点,无法大幅提升系统的性能。根据帕累托法则(也叫二八定律),只有优化处于性能瓶颈的那些少量代码,才能用最小的成本获得最大的收益。
然而,找到性能瓶颈却不是一件容易的事。我们通常会采用各种监控手段来发现性能瓶颈,但如果监控动作自身的开发成本过高,或者施行监控时显著降低了业务请求的性能,或者无法全面覆盖潜在的问题,都会影响性能优化目标的实现。
这一讲,我将介绍 2 个简单而又行之有效的方案,分别从微观上快速地找出进程内的瓶颈函数,以及从宏观上找出整个分布式系统中的瓶颈组件。这样,我们就可以事半功倍地去优化系统性能。
单机:如何通过火焰图找到性能瓶颈?
对于工作在一台主机上的进程而言,有许多监控方案可用于寻找性能瓶颈。比如在 Linux 下,你可以通过 iostat 命令监控磁盘状态,也可以通过 top 命令监控 CPU、内存的使用。这些方案都是在旁敲侧击着寻找性能瓶颈,然而,有一种最直接有效的方式,就是从代码层面直接寻找调用次数最频繁、耗时最长的函数,通常它就是性能瓶颈。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何通过监控找到系统性能瓶颈。作者首先指出了优化系统性能时盲目优化的弊端,强调了帕累托法则的重要性。然后,作者介绍了两种简单而有效的方案,分别从微观和宏观角度找出性能瓶颈。在微观层面,作者介绍了使用火焰图来找到单机进程内的性能瓶颈。火焰图可以直观展示函数调用栈和执行时间,帮助快速定位性能瓶颈。作者还详细介绍了如何生成火焰图的步骤,包括使用perf工具采集函数调用频率数据,并使用FlameGraph脚本生成火焰图。此外,还介绍了Off CPU火焰图的生成步骤。在宏观层面,作者提到了通过监控找出整个分布式系统中的瓶颈组件。整体而言,本文通过具体的案例和步骤,为读者提供了一种实用的性能优化方法,有助于快速定位和解决系统性能瓶颈问题。文章还介绍了分布式系统中的性能监控体系,包括日志管理、数据存储、离线和实时分析等方面。通过这些监控方案,读者可以更好地了解系统性能状况,实现自动化扩容、缩容和资源利用率的优化。整体而言,本文为读者提供了全面的性能监控和优化方案,对于系统性能调优和故障排查具有重要的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《系统性能调优必知必会》,新⼈⾸单¥59
《系统性能调优必知必会》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- 小喵喵老师,您列举的例子分析都是一些正规的系统,如果是一个垃圾系统,比如非分布式系统,程序猿连日志都没有写,都是直接连接数据库的,一个方法里面有的有上万行代码,压根儿就无法修改。系统性能问题一堆,针对这样的垃圾系统如何做性能监控呢?
作者回复: 火焰图能定位到函数,包括系统函数,即使你一个方法里有上万行代码,它总是要调用系统函数的,所以从系统函数的调用频率上,还是可以找到瓶颈的。当然,如果是纯用户态的计算代码就无能为力了。
2020-06-2924 - Kvicii.Y很有启发,之前一直知道有这么个东西就是没去用
作者回复: 简单有效^_^
2020-07-021 - EncodedStar性能瓶颈是一个程序员必须要走的路
作者回复: ^_^
2020-10-19 - 槑·先生arthas这个工具能更方便地生成火焰图,大家可以试试。2020-06-23218
- 阿白作者个人网站的火焰图访问不了2022-08-21归属地:上海1
- 黄骏火焰图确实很直观,分布式系统的性能分析这个领域有哪些比较经典的论文或者开源项目吗?2020-07-02
- 许童童学习了,了解到了更多火焰图的使用技巧,原来还有on cpu和off cpu的,使用的时候看耗时最长的不是光看长度就可以了,而是用自身的长度减去子函数调用的长度,结果宽度较长的话就是耗时很长。2020-06-19
- Geek_1386e9打卡,火焰图真是个机器,太好用啦2020-06-19
收起评论