首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“攻城狮”实用指南之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 性能优化实战》
  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/8b0d678eef570078f56a35da9
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券