上一节,我带你一块儿梳理了常见的性能优化思路,先简单回顾一下。咱们能够从系统和应用程序两个角度,来进行性能优化。ios
性能优化最好逐步完善,动态进行。不要追求一步到位,而要首先保证能知足当前的性能要求。git
性能优化一般意味着复杂度的提高,也意味着可维护性的下降。github
若是你发现单机的性能调优带来太高复杂度,必定不要沉迷于单机的极限性能,而要从软件架构的角度,以水平扩展的方法来提高性能。缓存
工欲善其事,必先利其器。咱们知道,在性能分析和优化时,借助合适的性能工具,可让整个过程事半功倍。你还记得有哪些经常使用的性能工具吗?今天,我就带你一块儿梳理一下经常使用的性能工具,以便你在须要时,能够迅速找到本身想要的。性能优化
在梳理性能工具以前,首先给你提一个问题,那就是,在什么状况下,咱们才须要去查找、挑选性能工具呢?你能够先本身想一下,再继续下面的内容。网络
其实在我看来,只有当你想了解某个性能指标,殊不知道该怎么办的时候,才会想到,“要是有一个性能工具速查表就行了”这个问题。若是已知一个性能工具可用,咱们更多会去查看这个工
具的手册,找出它的功能、用法以及注意事项。多线程
关于工具手册的查看,man 应该是咱们最熟悉的方法,我在专栏中屡次介绍过。实际上,除了man 以外,还有另一个查询命令手册的方法,也就是 info。架构
info 能够理解为 man 的详细版本,提供了诸如节点跳转等更强大的功能。相对来讲,man 的输出比较简洁,而 info 的输出更详细。因此,咱们一般使用 man 来查询工具的使用方法,只有在
man 的输出不太好理解时,才会再去参考 info 文档。异步
固然,我说过了,要查询手册,前提必定是已知哪一个工具可用。若是你还不知道要用哪一个工具,就要根据想了解的指标,去查找有哪些工具可用。这其中:工具
因此,在选择性能工具时,除了要考虑性能指标这个目的外,还要结合待分析的环境来综合考虑。好比,实际环境是否容许安装软件包,是否须要新的内核版本等。
明白了工具选择的基本原则后,咱们来看 Linux 的性能工具。首先仍是要推荐下面这张图,也就是 Brendan Gregg 整理的性能工具谱图。我在专栏中屡次提到过,你确定也已经参考过。
这张图从 Linux 内核的各个子系统出发,汇总了对各个子系统进行性能分析时,你能够选择的工具。不过,虽然这个图是性能分析最好的参考资料之一,它其实还不够具体。
好比,当你须要查看某个性能指标时,这张图里对应的子系统部分,可能有多个性能工具可供选择。但实际上,并不是全部这些工具都适用,具体要用哪一个,还须要你去查找每一个工具的手册,对
比分析作出选择。
那么,有没有更好的方法来理解这些工具呢? 个人建议,仍是从性能指标出发,根据性能指标的不一样,将性能工具划分为不一样类型。好比,最多见的就是能够根据 CPU、内存、磁盘 I/O 以及网
络的各种性能指标,将这些工具进行分类。
接下来,我就从 CPU、内存、磁盘 I/O 以及网络等几个角度,梳理这些常见的 Linux 性能工具,特别是从性能指标的角度出发,理清楚到底有哪些工具,能够用来监测特定的性能指标。这些工
具,实际上贯穿在咱们专栏各模块的各个案例中。为了方便你查看,我将它们都整理成了表格,并增长了每一个工具的使用场景。
首先,从 CPU 的角度来讲,主要的性能指标就是 CPU 的使用率、上下文切换以及 CPU Cache 的命中率等。下面这张图就列出了常见的 CPU 性能指标。
从这些指标出发,再把 CPU 使用率,划分为系统和进程两个维度,咱们就能够获得,下面这个CPU 性能工具速查表。注意,由于每种性能指标均可能对应多种工具,我在每一个指标的说明中,
都帮你总结了这些工具的特色和注意事项。这些也是你须要特别关注的地方。
接着咱们来看内存方面。从内存的角度来讲,主要的性能指标,就是系统内存的分配和使用、进程内存的分配和使用以及 SWAP 的用量。下面这张图列出了常见的内存性能指标。
从这些指标出发,咱们就能够获得以下表所示的内存性能工具速查表。同 CPU 性能工具同样,这儿我也帮你梳理了,常见工具的特色和注意事项。
注:最后一行 pcstat 的源码连接为 https://github.com/tobert/pcstat
接下来,从文件系统和磁盘 I/O 的角度来讲,主要性能指标,就是文件系统的使用、缓存和缓冲区的使用,以及磁盘 I/O 的使用率、吞吐量和延迟等。下面这张图列出了常见的 I/O 性能指标。
从这些指标出发,咱们就能够获得,下面这个文件系统和磁盘 I/O 性能工具速查表。同 CPU 和内存性能工具同样,我也梳理出了这些工具的特色和注意事项
最后,从网络的角度来讲,主要性能指标就是吞吐量、响应时间、链接数、丢包数等。根据TCP/IP 网络协议栈的原理,咱们能够把这些性能指标,进一步细化为每层协议的具体指标。这里
我一样用一张图,分别从链路层、网络层、传输层和应用层,列出了各层的主要指标。
从这些指标出发,咱们就能够获得下面的网络性能工具速查表。一样的,我也帮你梳理了各类工具的特色和注意事项。
除了性能分析外,不少时候,咱们还须要对系统性能进行基准测试。好比,
在文件系统和磁盘 I/O 模块中,咱们使用 fio 工具,测试了磁盘 I/O 的性能。在网络模块中,咱们使用 iperf、pktgen 等,测试了网络的性能。
而在不少基于 Nginx 的案例中,咱们则使用 ab、wrk 等,测试 Nginx 应用的性能。
除了专栏里介绍过的这些工具外,对于 Linux 的各个子系统来讲,还有不少其余的基准测试工具可能会用到。下面这张图,是 Brendan Gregg 整理的 Linux 基准测试工具图谱,你能够保存下
来,在须要时参考。
今天,咱们一块儿梳理了常见的性能工具,并从 CPU、内存、文件系统和磁盘 I/O、网络以及基准测试等不一样的角度,汇总了各种性能指标所对应的性能工具速查表。
当分析性能问题时,大的来讲,主要有这么两个步骤:
虽然 Linux 的性能指标和性能工具都比较多,但熟悉了各指标含义后,你天然就会发现这些工具同性能指标间的关联。顺着这个思路往下走,掌握这些工具的选用其实并不难。
固然,正如我们专栏一直强调的,不要把性能工具当成性能分析和优化的所有。