写点什么

“攻城狮”实用指南之 Linux CPU 性能优化

用户头像
中原银行
关注
发布于: 23 小时前
“攻城狮”实用指南之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. 写在最后

想要学好性能分析和优化,最重要的核心思想是要建立整体系统性能的全局观。因而需要我们能够做到:


  1. 理解最基本的一些操作系统原理;

  2. 掌握必要的性能工具;

  3. 能够根据不同的问题场景,恰当地选择合适的组件;


但是需要切记,不能把性能工具当做学习的全部。工具只是解决问题的手段,关键在于怎么用,只有了解它们背后的原理,结合具体场景,融会系统的不同组件,才算真正掌握了它们。


分享两个学习技巧:


技巧一:虽然系统的原理很重要,但在刚开始一定不要试图抓住所有的实现细节。


深陷到系统实现的内部,可能会让你丢掉学习的重点,而且繁杂的实现逻辑,很可能会打退你学习的积极性。所以,一定要适度。


技巧二:边学边实践,通过大量的案例演习掌握 Linux 性能的分析和优化。


知识的掌握,特别是实践类姿势的掌握,仅仅依靠看是万万不可能形成长久记忆的,只有通过在机器上“真枪实弹”的场景练习,才能让知识内化为自己的财富。


本文转载自原银科技

原文链接: “攻城狮”实用指南之Linux CPU性能优化

参考资料

  1. 极客时间:倪朋飞《Linux 性能优化实战》

发布于: 23 小时前阅读数: 11
用户头像

中原银行

关注

打造科技驱动、创新引领的数字化未来银行。 2020.02.06 加入

中原银行是河南省属法人银行,总部位于河南省郑州市。我行坚持“科技立行、科技兴行”,秉承“稳健 创新 进取 高效”理念,发展移动金融、线上金融,提升综合金融服务能力。 传送门:http://www.zybank.com.cn/

评论

发布
暂无评论
“攻城狮”实用指南之Linux  CPU性能优化