本篇文章介绍几款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平均使用率,其实不然,系统平均负载准确的来说是指平均单位时间内系统中处于正在运行状态和不可中断状态的平均进程数
。因此,它们之间没有准确的关系可言,分具体的场合来说明:
如果你想在自己模拟这些场景来测试系统的性能,可以使用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
接着可以使用上述的分析工具进行分析导致系统平均负载升高的原因。有兴趣的读者可以自己动手操作,这里不再展示。