使用stress工具来模拟CPU和内存负载 stress cpu_文件大小



使用stress工具来模拟CPU和内存负载 stress cpu_随机数_02


上一篇中已经初步了解了stress及sysstat工具包中mpstat及pidstat命令的使用,作为一名Linux应用程序工程师,有时遇到性能问题时,使用较多的还是mpstat及pidstat。我自己平时都没怎么用stress做压力测试,系统测试部门应该做过此类测试。

这一篇讲stress命令常用命令选项。man stress,输出如下:


使用stress工具来模拟CPU和内存负载 stress cpu_c linux time微秒_03


使用stress工具来模拟CPU和内存负载 stress cpu_c linux time微秒_04


使用stress工具来模拟CPU和内存负载 stress cpu_文件大小_05


-n,显示已完成的指令情况

-t,运行N秒后停止

--backoff,等待N微秒后开始运行

-c,模拟N个CPU密集型进程(进程主要调用sqrt()函数计算随机数的平方根)

-i,模拟N个I/O密集型进程(进程调用sync()将内存缓冲刷新到磁盘上)

-m,模拟N个内存压力测试进程,进程不断调用malloc/free

--vm-bytes,指定上述产生进程的malloc的大小,默认256M

--vm-stride ,这项没懂?

--vm-hang ,表示分配的内存经过N秒再释放

--vm-keep,保持分配的内存,不释放或者重新分配

-d,模拟N个进程做write/unlink操作

--hdd-bytes,指定硬盘写操作的进程写的文件大小

--hdd-noclean,写入的文件不删除

更详细的细节可以通过info stress命令查看。

以上大概可以分成四类压力测试:

CPU运算压力测试,I/O缓冲压力测试,内存压力测试,硬盘写压力测试

针对上篇I/O密集型进程模拟时,用mpstat查看时,%sys为98.80%,%iowait为1.00%

我的理解是stress -i 命令只是调用sync()系统调用刷新缓冲区内容到磁盘,但是他是刷新的系统已有的缓冲区,当系统缓冲区内容已经刷新到磁盘上时,%iowait便不会增加。所以可以尝试stree -d 命令,即产生新的文件进行写文件的压力测试。写文件时最终也会调用sync命令刷新到磁盘上。如下图,使用stress -d 模拟I/O压力测试:


使用stress工具来模拟CPU和内存负载 stress cpu_随机数_06


mpstat输出如下,%iowait明显上升,


使用stress工具来模拟CPU和内存负载 stress cpu_压力测试_07


也可以用taskset -c命令对指定CPU进行I/O压力测试,如下:


使用stress工具来模拟CPU和内存负载 stress cpu_文件大小_08


使用stress工具来模拟CPU和内存负载 stress cpu_文件大小_09


可以看到0号CPU %iowait指标相对于其他CPU明显激增。