illx10000

3. 度量与工具

接上文,我们讲 熟知

3.1 机器提供的能力

因为所有的程序都是部署在机器上,所以需要了解机器提供的能力,选择合适的机器类型很重要,例如

根据业务的形态,再选择合适类型的机器

3.2 程序预计消耗的性能

预估程序消耗的性能,通常有两种方式:

通常上面两种方式会结合使用,通过代码评估可能的性能短板在哪里,通过压力测试来评估真正的性能数据

3.3 程序实际消耗的性能

回到主题,如何了解程序消耗的磁盘性能,换句话说 如何对 Linux IO 进行监控与深入分析? 以下内容主要参考这篇文章:

如果能够回答下面三个问题,那么问题也就解决了很大一半,剩下的问题可能依然需要具体分析:

3.3.1 系统级别监控 iostat

iostat 主要用于监控系统设备的 IO 负载情况,iostat 首次运行时显示自系统启动开始的各项统计信息,之后运行 iostat 将显示自上次运行该命令以后的统计信息。 iostat 的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU 使用情况。CPU 统计数据是作为所有处理器之间的平均值在系统范围内计算的。iostat 也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

通过下面的命令,可以连续输出磁盘IO的信息

iostat -xdm 1

输出可以自己执行一下看一下,大致如下图:

Linux 4.15.0-142-generic (VM-16-4-ubuntu)       11/03/2021      _x86_64_        (1 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
loop0             0.00     0.00    0.00    0.00     0.00     0.00    51.46     0.00    0.50    0.50    0.00   0.08   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00    80.89     0.00    0.24    0.24    0.00   0.18   0.00
vda               0.00     1.78   88.40    1.01     5.81     0.02   133.38     0.05    1.15    1.13    2.57   0.60   5.37

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
loop0             0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
vda               0.00     2.06 2648.45    8.25    93.84     0.04    72.37     5.11    2.30    2.30    4.00   0.31  81.65

man 一下 iostat可以得到下面的解释

总结:

3.3.2 进程IO使用度量

通常使用

3.3.3 程序内调用:

通常使用