当我们的系统很慢的时候,通常的做法是登陆到服务器上执行top或者uptime查看服务器的运行情况对吧,比如像下面这个样子
03:07:33 up 3:24, 3 users, load average: 0.00, 0.01, 0.05
但是我想问的是有多少人知道这个命令显示内容的含义呢?反正我是不太清楚的,我只是知道后面三个数字表示的是1分钟,5分钟,15分钟的平均负载情况。
既然像我这种不清楚uptime显示内容含义的怎么办呢?我们可以man uptime呀!
DESCRIPTION
uptime gives a one line display of the following information. The current time, how long the system has been running, how many users are currently logged on, and the system load
averages for the past 1, 5, and 15 minutes.
This is the same information contained in the header line displayed by w(1).
System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting
to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are
not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the
time.
翻译过来就是系统平均负载是正在运行中进程或者非中断进程数量的平均数。一个运行状态的进程可能是正在使用cpu或者等待使用cpu的进程,一个非中断状态的进程指的是等待IO访问的进程,例如等待硬盘操作的进程。
那么按照官方的说法,系统平均负载等于cpu的个数才是最理想的状态,平均负载高于cpu的个数说明我们的服务器负载高。
那问题又来了,我们怎么看一个Linux的cpu个数呢?使用以下命令查看
grep 'model name' /proc/cpuinfo | wc -l
像我的虚拟机只有一个cpu,那么uptime的结果小于1才会合适的,那我的虚拟机现在的
系统平均负载结果是什么呢?执行uptime去看一下呢
从结果看我的虚拟机平均负载很好,那为什么需要三个时间呢?我猜测是为了观察负载的趋势吧,比如我的虚拟机1分钟的负载是0.00,5分钟之前的负载是0.01,15分钟的负载是0.05说明我的虚拟机的负载是在降低
说了这么多理论的东西,那么到底我这边说的对还是不对呢?怎么能实验出来?
实验步骤:
从官方文档中得知,平均负载包括正在使用cpu和等待使用cpu和非中断进程,那我们就
模拟一个密集cpu的进程和密集IO的进程。
那我接着就百度一下,那个工具能实现模拟Linux密集cpu和密集IO的程序的效果
我这边使用两个工具:
stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场 景
而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用 到这个包的两个命令 mpstat 和 pidstat
mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标, 以及所有 CPU 的平均指标。
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及 上下文切换等性能指标。
首先呢我们要安装epel-release yum源 ,命令:yum install -y epel-release
接着安装stress,命令如下yum install -y stress
如图如下图显示那么证明安装成功了。
接着再安装sysstat工具包
终于好了,现在就开始我们的实验吧!!!!!
我这边打开3个会话
会话1:stress --cpu 1 --timeout 600
会话2:watch -d uptime
会话3:mpstat -P ALL 5
结果如下:
备注:从会话2看到平均负载一直在升高,会话3结果得知是cpu的使用率上去导致了平均负载的提升,而不是IO
这个时候我们想看一下是哪个进程导致了cpu使用高了,很简单嘛,top呀
扩展:
stress使用
https://www.cnblogs.com/jingmu/p/7645548.html
sysstat工具包使用
https://www.cnblogs.com/xiaochina/p/5920854.html