本篇文章介绍几款linux系统性能压测以及分析工具,在实际开发环境中,我们会经常使用到它们对我们的系统进行性能分析。

当我们需要判断linux系统的性能时,常常会观察几个常用的指标:平均负载、CPU使用率,IO负载等等。

那么当我们需要查看系统平均负载的时候可以使用uptime命令来查看,它代表系统1分钟内、5分钟内、15分钟内的平均负载:

[root@izuf64g0bbe3dug64wpdckz ~]# uptime
 14:25:40 up 1 min,  1 user,  load average: 0.08, 0.05, 0.02

那么系统负载和CPU使用率以及IO负载之间有什么关系呢?不少人以为平均负载就是CPU平均使用率,其实不然,系统平均负载准确的来说是指平均单位时间内系统中处于正在运行状态和不可中断状态的平均进程数。因此,它们之间没有准确的关系可言,分具体的场合来说明:

  • CPU密集的进程中,平均负载的升高是由于CPU大量被使用而导致的。
  • IO密集的进程中,等待IO也会导致平均负载升高,但是CPU使用率不一定很高。
  • 大量的进程调度,频繁的进程上下文切换也会导致平均负载升高,此时CPU使用率也很高。

如果你想在自己模拟这些场景来测试系统的性能,可以使用linux预测工具stress,然后使用sysstat工具来进行CPU,IO性能的分析。

首先使用下面命令来安装上面的工具:

yum install stress
yum install sysstat

在sysstat工具包中提供了几个常用工具,mpstat是常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有CPU的平均指标。pidstat是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O以及上下文切换等性能指标。

我们可以使用stress工具来模拟CPU被打满,IO负载升高,大量进程被调度的场景。然后使用sysstat来分析性能。

比如下面模拟CPU使用率为100%的场景:

stress --cpu 1 --timeout 600

使用uptime工具来查看系统的平均负载:

$ watch -d uptime

Every 2.0s: uptime                                      Sat Jun 29 14:46:35 2019

 14:46:35 up 22 min,  3 users,  load average: 2.49, 0.99, 0.39

使用mpstat来查看CPU使用情况:

#监控所有的CPU,每隔5秒输出一次
$ mpstat -P ALL 5

02:45:49 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:45:54 PM  all   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00
02:45:54 PM    0   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00

可以看出系统的平均负载升高是由于CPU使用率高达99%,近乎100%,那么到底是哪个进程导致CPU使用率 升高呢?

使用pidstat命令来分析:

[root@izuf64g0bbe3dug64wpdckz ~]# pidstat -u 5
Linux 3.10.0-514.26.2.el7.x86_64 (izuf64g0bbe3dug64wpdckz)      06/29/2019     _x86_64_ (1 CPU)

02:49:05 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
02:49:10 PM     0      1020    0.20    0.20    0.00    0.40     0  AliYunDun
02:49:10 PM     0      2130   99.40    0.00    0.00   99.40     0  stress

可以看到是stress进程导致CPU被打满。

同样的,我们可以使用stress来模拟IO负载升高的场景:

stress -i 1 --timeout 600

模拟大量进程调度的场景:

#模拟8个进程
stress -c 8 --timeout 600

接着可以使用上述的分析工具进行分析导致系统平均负载升高的原因。有兴趣的读者可以自己动手操作,这里不再展示。