在仿照故障场景之前,先来理解一个压力测试工具:stress(提示:生产环境慎用,会影响线上做事)
这个工具有些系统可能没有安装,须要自己下载安装:
centos或者redhat系统安装办法:

yum install stress -y
ubuntu系统安装办法:
apt-get install stress -y
其他系统请自行搜索。
我们先help下stress命令的用法
希望大家理解一个新命令之前先man一下或者help一下该命令,这是一个特殊好的习气,不要偷
(0)压力测试前的系统指标
在进行压力测试之前我们先看下系统的指标
从图中top命令(top后按大P建会按CPU利用率排序)我们可以看到CPU利用率为1-99.0%=1%,各个进程的CPU分别为0.3%、0.3%、0.3%。。。,1分钟、5分钟、15分钟负载分别为0.00、0.01、0.05,可以说是相称的空闲。
其余解释一点这个CPU利用率是统计的都是占用所有CPU核心数的比例,后面一篇文章会详细的讲解打算方法。比如我的CPU核数可以利用一下命令查看(也可以top后按1键查看):
# grep -i "model name" /proc/cpuinfo | wc -l2
这个解释我开拓机的CPU利用率最大可以到200%。
(1)CPU利用率高引起负载高
stress -c 4 -t 300
-c参数解释我起了4个stress进程 -t参数解释压测300s,下面我们top下创造CPU空闲率为0,利用率为2-0.0%=200%,恰好即是4个stress进程的利用率之和。这时不雅观察创造负载一贯在升高,已经高于核心数(2个),解释涌现了排队的情形。
这种情形便是CPU和负载都涌现了升高,而且涌现负载升高的缘故原由是不是CPU涌现了压力引起的呢?上篇文章Linux篇:(2)CPU之负载高怎么办中提到引起负载高的缘故原由也可能是IO涌现了瓶颈,那我们看下IO性能,IO的性能怎么看呢,推举一个查看系统整体性能的工具iostat,这次我直接上命令,iostat的其他参数含义可以自行查找,这个命令会在后面磁盘篇会详细讲解,这次我们先整体认识下。
-x参数表示展示统计信息,后面的1表示每1s输出一次。这里有一点须要解释,第一次打印的信息(也便是红框内的信息)可以忽略一下,由于它是从系统启动以来的统计信息,而不是现在实时的信息。这个在iostat命令的描述中有解释:
The first report generated by the iostat command provides statistics concerning the time since the system was booted.
rrqm/s:每秒该设备干系的读取要求有多少被合并,这个是为了提高读效率;
wrqm/s:每秒该设备干系的写要求有多少被合并这个是为了提高写效率。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
r/s:该设备每秒读要求数;
w/s:该设备每秒写要求数;
await:每一个IO要求处理的均匀韶光(ms)。
%util:该设备单位韶光内处理IO的均匀韶光比率。它表示了一个设备的繁忙程度。
从上图可以看出系统整理上没有什么读写(忽略红框内第一次输出),以是我们得出结论这次引起负载升高的缘故原由是CPU利用率占用高引起来的。
现在我们找明晰引起CPU升高的进程,但是stress进程在干什么呢?我们还可以再进一步剖析,接下来推举另一个性能剖析工具perf。
类似top查看系统实时性能,我们也可以利用perf top不雅观察一个别系的性能。Perf top 用于实时显示当前系统的性能统计信息。该命令紧张用来不雅观察全体系统当前的状态,比如可以通过查看该命令的输出来查看当前系统最耗时的内核函数或某个用户进程。加上-p参数 后面跟上进程pid可以展示这个进程的最耗时的线程和函数。那我们就来实验一下,现在我们就选择pid为120934的一个stress进程查看。
perf top -p 120934
从上图我们可以看到stress进程调用了libc动态库的random函数引起了CPU利用率升高。比如,stress高的是java或者php之类的措辞,开拓职员就要查看自己代码是不是有在系统调用的地方利用的不合理。
(3)IO压力引起负载高
IO压力测试当然也可以利用stress命令,但是它仿照的是sync命令的实行,sync 命令用来刷新文件系统的缓冲区,实行sync命令实际的浸染是把内存中的数据缓冲写入到磁盘中。我试了下效果不是很明显,那么我就利用另一个IO测试工具dd。
dd if=/dev/zero of=test.txt bs=1024K count=2000000
上面命令的意思是往test.txt文件里写数据,每个块大小是1024K也便是1M,共写入2000000个块,也便是1M2000000=200G数据。而/dev/zero 是一个分外的文件,当你读它的时候,它会供应无限的空字符。也便是从/dev/zero读取空字符串写入test.txt文件里,统共写入200G。
现在top创造均匀负载逐渐从0升高到2+,而CPU利用率占用了47%,并没有占满。
我们再不雅观察IO情形,创造%util已经占用了100%,解释IO已经十分繁忙。
通过以上可以得出结论:这次均匀负载升高紧张是IO压力导致的。