上一篇中已经初步了解了stress及sysstat工具包中mpstat及pidstat命令的使用,作为一名Linux应用程序工程师,有时遇到性能问题时,使用较多的还是mpstat及pidstat。我自己平时都没怎么用stress做压力测试,系统测试部门应该做过此类测试。
这一篇讲stress命令常用命令选项。man stress,输出如下:
-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压力测试:
mpstat输出如下,%iowait明显上升,
也可以用taskset -c命令对指定CPU进行I/O压力测试,如下:
可以看到0号CPU %iowait指标相对于其他CPU明显激增。