“攻城狮”实用指南之 Linux CPU 性能优化
软件“攻城狮”在做应用程序开发时,往往都绕不开一个话题,那就是性能优化。无论是初入职场的小菜鸟,还是摸爬 滚打多年的程序高手,面对程序的性能优化问题,经常还是感到头疼无比。实际上,性能优化一直都是大多数软件工程师头上的“紧箍咒”。
1. 为什么要了解 Linux 性能优化?
很多工程师在工作中可能有遇到过以下类似的经历,有过下面的疑惑:
应用服务器 CPU 使用率过高告警,登录服务器之后使用 top 查看系统资源信息,确认问题存在后,却无法进一步定位原因,是系统 CPU 资源太少?还是程序并发编写有 bug?
应用程序上线前进行性能测试,请求并发上去之后,CPU 和内存使用率却无法上升,只有响应时间在持续增 长,问题出现在什么地方,如何定位?
应用程序运行明明限制了运行使用最大内存,为什么操作系统内存使用率持续上升?到底是哪里占用了内存?
目前行内系统,无论是前端应用还是后端应用,无论是单体服务还是微服务,包括数据持久化使用到的数据库和文件 系统,均运行在 Linux 操作系统上。因此我们在开展性能优化的工作时,linux 相关性能优化工作就是重中之重了。
另外,Linux 性能优化同时是最能体现工程师综合能力的技能之一,因为它涵盖了包括程序设计、编程语言、操作系 统、再到存储、网络等方方面面的各种知识储备。了解甚至掌握 Linux 性能优化对提升个人能力大有裨益,如果能够 将性能优化的各个关键点吃透,无疑就能被称为一个非常优秀的软件“攻城狮”了。
2. Linux CPU 性能优化基础
本篇文章主要针对 CPU 的性能优化相关知识进行展开学习:
2.1 CPU 常用性能指标说明
CPU 使用率
CPU 使用率表明了 CPU 运行的非空闲时间时间片占 CPU 总时间的百分比,根据 CPU 上运行任务的不同,还被划分为用户 CPU 使用率(CPU 在用户态运行的时间百分比)、系统 CPU 使用率(CPU 在内核态运行的时间百分比, 但不包含中断响应)、等待 IO 的 CPU 使用率(也称为 iowait,表示等待 I/O 的时间百分比)、软中断和硬中断的 CPU 使用率(内核调用软中断处理程序、硬中断处理程序的时间百分比)。
平均负载
平均负载代表了系统的整体负载情况,其本质是系统的平均活跃进程数。因此理想情况下,平均负载应该等于系统的逻辑 CPU 个数,表明这时恰好所有的 CPU 都被充分利用到了。
进程上下文切换
CPU 在进行不同的任务调度的时候需要进行上下文切换,过多的上下文切换会导致 CPU 运行时间过度消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而导致进程运行时间缩短。进程的上下文切换包含 2 种场景:
无法获取资源而导致的自愿上下文切换;
被系统强制调度导致的非自愿上下文切换;
CPU 缓存命中率
CPU 缓存是在 CPU 上存储的部分热点内存数据,为的是解决 CPU 和内存之间速度匹配问题,CPU 缓存的命中率表明了 CPU 缓存数据的复用情况,命中率越高,表示性能越好。
2.2 CPU 常用性能工具汇总
根据指标快查工具
根据工具查看指标
3. 常用 CPU 优化套路
3.1 CPU 资源分析思维导图
3.2 CPU 优化思路
第一,从 CPU 使用的角度来说,简化代码、优化算法、异步处理以及编译器优化等,都是常用的降低 CPU 使用率的方法,这样可以利用有限的 CPU 处理更多的请求。
第二,从数据访问的角度来说,使用缓存、写时复制、增加 I/O 尺寸等,都是常用的减少磁盘 I/O 的方法,这样可以获得更快的数据处理速度。
第三,从进程的工作模型来说,异步处理、多线程或多进程等,可以充分利用每一个 CPU 的处理能力,从而提高应用程序的吞吐能力。
除此之外,还可以使用消息队列、CDN、负载均衡等各种方法,来优化应用程序的架构,将原来单机要承担的任务, 调度到多台服务器中并行处理。这样也往往能获得更好的整体性能。
4. 写在最后
想要学好性能分析和优化,最重要的核心思想是要建立整体系统性能的全局观。因而需要我们能够做到:
理解最基本的一些操作系统原理;
掌握必要的性能工具;
能够根据不同的问题场景,恰当地选择合适的组件;
但是需要切记,不能把性能工具当做学习的全部。工具只是解决问题的手段,关键在于怎么用,只有了解它们背后的原理,结合具体场景,融会系统的不同组件,才算真正掌握了它们。
分享两个学习技巧:
技巧一:虽然系统的原理很重要,但在刚开始一定不要试图抓住所有的实现细节。
深陷到系统实现的内部,可能会让你丢掉学习的重点,而且繁杂的实现逻辑,很可能会打退你学习的积极性。所以,一定要适度。
技巧二:边学边实践,通过大量的案例演习掌握 Linux 性能的分析和优化。
知识的掌握,特别是实践类姿势的掌握,仅仅依靠看是万万不可能形成长久记忆的,只有通过在机器上“真枪实弹”的场景练习,才能让知识内化为自己的财富。
本文转载自原银科技
原文链接: “攻城狮”实用指南之Linux CPU性能优化
参考资料
极客时间:倪朋飞《Linux 性能优化实战》
版权声明: 本文为 InfoQ 作者【中原银行】的原创文章。
原文链接:【http://xie.infoq.cn/article/8b0d678eef570078f56a35da9】。文章转载请联系作者。
评论