问题1 : 性能工具版本太低,导致指标不全
某些版本的pidstat没有%wait,这是因为%wait时sysstat 11.5.5版本才引入的新指标,这时候如果无法安装新版本等情况下,可以查看/proc目录下文件中的指标,这是性能工具上能看到的各项性能指标的原始数据来源
问题2 : 使用 stress 命令,无法模拟 iowait 高的场景
使用 stress 无法模拟 iowait 升高,但是却看到了 sys 升高。这是因为案例中 的 stress -i 参数,它表示通过系统调用 sync() 来模拟 I/O 的问题,但是sync() 的本意是刷新内存缓冲区的数据到磁盘中,以确保同步。如果缓冲区内本来就没多少数据,那读写到磁盘中的数据也就不多,也就没法产生 I/O 压力。这种情况可以考虑使用 stress-ng来代替 stress
问题 3:无法模拟出 RES 中断的问题
重调度中断是调度器用来分散任务到不同 CPU 的机制,也就是可以唤醒空闲状态的 CPU ,来调度新任务运行,而这通常借助处理器间中断(Inter-Processor Interrupts,IPI)来实现.所以单核CPU是无法模拟这种情况的
问题 4:无法模拟出 I/O 性能瓶颈,以及 I/O 压力过大的问题
这个问题,其实还是因为每个人的机器配置不同,既包括了 CPU 和内存配置的不同,更是因为磁盘的巨大差异。比如,机械磁盘(HDD)、低端固态磁盘(SSD)与高端固态磁盘相比,性能差异可能达到数倍到数十倍。
问题 5:性能工具(如 vmstat)输出中,第一行数据跟其他行差别巨大
运行 man vmstat 命令,你可以在手册中发现下面这句话:
The first report produced gives averages since the last reboot. Additional reports give information on a sam‐
pling period of length delay. The process and memory reports are instantaneous in either case.
第一行数据是系统启动以来的平均值,其他行才是你在运行 vmstat 命令时,设置的间隔时间的平均值。另外,进程和内存的报告内容都是即时数值