> 文章列表 > Linux性能优化(一)

Linux性能优化(一)

Linux性能优化(一)

文章目录

  • 开篇
  • 性能问题为什么这么难呢?
  • 学习重点
  • 专栏
  • 性能指标是什么?
  • 性能问题
  • 性能工具
  • 学习思路
  • 精选评论
    • forever
    • 十三

开篇

怎么把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序、库函数、系统调用、再到内核和硬件等不同的层级贯穿起来。

问题:

  • 流量高峰期,服务器 CPU 使用率过高报警,你登录 Linux 上去 top 完之后,却不知道怎么进一步定位,到底是系统 CPU 资源太少,还是程序并发部分写的有问题?
  • 系统并没有跑什么吃内存的程序,但是敲完 free 命令之后,却发现系统已经没有什么内存了,那到底是哪里占用了内存?为什么?
  • 一大早就收到 Zabbix 告警,你发现某台存放监控数据的数据库主机的 iowait 较高,这个时候该怎么办?

性能问题为什么这么难呢?

  • 系统工程,总是牵一发而动全身。
  • 它涉及了从程序设计、算法分析、编程语言,再到系统、存储、网络等各种底层基础设施的方方面面。
  • 每一个组件都有可能出问题,而且很有可能多个组件同时出问题。

学习重点

  • 了解少数几个系统组件的基本原理和协作方式
  • 掌握基本的性能指标和工具
  • 学会实际工作中性能优化的常用技巧
  • 在这个认知的基础上,再反过来去阅读那些经典的操作系统或者其它图书

专栏

案例驱动的思路,给你讲解 Linux 性能的基本指标、工具,以及相应的观测、分析和调优方法。

5 个模块。前 4 个模块我会从资源使用的视角出发,带你分析各种 Linux 资源可能会碰到的性能问题,包括 CPU 性能、磁盘 I/O 性能、内存性能以及网络性能。
每个模块还由浅入深划分为四个不同的篇章。

  • 基础篇,介绍 Linux 必备的基本原理以及对应的性能指标和性能工具。比如怎么理解平均负载,怎么理解上下文切换,Linux 内存的工作原理等等。
  • 案例篇,这里我会通过模拟案例,帮你分析高手在遇到资源瓶颈时,是如何观测、定位、分析并优化这些性能问题的。
  • 套路篇,在理解了基础,亲身体验了模拟案例之后,我会帮你梳理出排查问题的整体思路,也就是检查性能问题的一般步骤,这样,以后你遇到问题,就可以按照这样的路子来。
  • 答疑篇,我相信在学习完每一个模块之后,你都会有很多的问题,在答疑篇里,我会拿出提问频次较高的问题给你系统解答。

第 5 个综合实战模块,还原真实的工作场景,手把手带你在“高级战场”中演练,这样你能把前面学到的所有知识融会贯通,并且看完专栏,马上就能用在工作中。

想要得到你就要学会付出,要付出还要坚持;如果你真的觉得很难,那你就放弃,如果你放弃了就不要抱怨。人生就是这样,世界是平衡的,每个人都是通过自己的努力,去决定自己生活的样子。

性能指标是什么?

从应用负载的视角来考察性能,直接影响了产品终端的用户体验。

  • 高并发 - 吞吐
  • 响应快 - 延时

系统资源的视角出发的指标

  • 资源使用率
  • 饱和度

性能问题

我们知道,随着应用负载的增加,系统资源的使用也会升高,甚至达到极限。
性能问题的本质,就是系统资源已经达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求。

性能分析,其实就是找出应用或系统的瓶颈,并设法去避免或者缓解它们,从而更高效地利用系统资源处理更多的请求。
这包含了一系列的步骤,比如下面这六个步骤。

  • 选择指标评估应用程序和系统的性能;
  • 为应用程序和系统设置性能目标;
  • 进行性能基准测试;
  • 性能分析定位瓶颈;
  • 优化系统和应用程序;
  • 性能监控和告警。

性能工具

性能领域的大师布伦丹·格雷格(Brendan Gregg)。他不仅是动态追踪工具 DTrace 的作者,还开发了许许多多的性能工具。我相信你一定见过他所描绘的 Linux 性能工具图谱:

​[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tHWhjpDC-1681825824360)(https://assets.b3logfile.com/siyuan/1658627274984/assets/image-20230418132223-3p2dlpg.png “性能工具图”)]​

比如,当遇到 I/O 性能问题时,可以参考图片最下方的 I/O 子系统,使用 iostat、iotop、blktrace 等工具分析磁盘 I/O 的瓶颈。你可以把这个图保存下来,在需要的时候参考查询

​[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nP8GOZOb-1681825827912)(null)]​

学习思路

  • 有哪些指标可以衡量性能?

  • 使用什么样的性能工具来观察指标?

  • 导致这些指标变化的因素等。

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

精选评论

forever

有监控的情况下,首先去看看监控大盘,看看有没有异常报警,如果初期还没有监控的情况我会按照下面步骤去看看系统层面有没有异常

  1. 我首先会去看看系统的平均负载,使用top或者htop命令查看,平均负载体现的是系统的一个整体情况,他应该是cpu、内存、磁盘性能的一个综合,一般是平均负载的值大于机器cpu的核数,这时候说明机器资源已经紧张了
  2. 平均负载高了以后,接下来就要看看具体是什么资源导致,我首先会在top中看cpu每个核的使用情况,如果占比很高,那瓶颈应该是cpu,接下来就要看看是什么进程导致的
  3. 如果cpu没有问题,那接下来我会去看内存,首先是用free去查看内存的是用情况,但不直接看他剩余了多少,还要结合看看cache和buffer,然后再看看具体是什么进程占用了过高的内存,我也是是用top去排序
  4. 内存没有问题的话就要去看磁盘了,磁盘我用iostat去查看,我遇到的磁盘问题比较少
  5. 还有就是带宽问题,一般会用iftop去查看流量情况,看看流量是否超过的机器给定的带宽
  6. 涉及到具体应用的话,就要根据具体应用的设定参数来查看,比如连接数是否查过设定值等
  7. 如果系统层各个指标查下来都没有发现异常,那么就要考虑外部系统了,比如数据库、缓存、存储等 基本上就上面这些步骤,有些不完整,希望跟着老师学习一些更系统的排查思路!

十三

作为一个完美主义者,一学起原理类的东西,真的不要太容易跑偏😂经常是看着某个重要原理,就想着找找看相关内容,然后就各种跳转搜索,以前最开始学数据结构的定义,都能跑到编译原理上,最后开始计算二进制了。 有时候大半天了,一个原理都没看完,就各种死抠和联想。这么做确实印象深刻,但是真的很低效,心累。 老师这里说的适度,真的很重要,而且这个度,确实应该是过来人才知道啊。 我一向喜欢系统化的学习,能有个“升级简化版”的系统知识图谱,不要太开心。可惜不能上传图片,不然可以把每次标记和补充也都打个卡了。

「此文章为4月Day11学习笔记,内容来源于极客时间《Linux性能优化》,强烈推荐该课程!/推荐该课程」

洞口生活网