我们常用用LTP的ltpstress.sh脚本测试Linux的稳定性,以下将探讨一下如何好的进行Linux压力测试。
一.如何对内核进行压力测试?
在进行压力测试之前,我们先思考一下压力测试要达到那些要求,才能说明Linux的稳定性。既然是压力测试,那么必然是超负荷测试,因此一般我们会对CPU、内存等使用率要求80%以上;另一个测试覆盖度。LTP已经为我们提供了测试用例,因此我们不用去考虑测试的覆盖度,那么我们关注的就是如何设置CPU和内存的压力。
二.ltpstress.sh默认测试场景
通常我们在进行Linux压力测试时,CPU和内存使用率要求90%以上,那么关键是如何设置ltpstress.sh才能满足这两个要求。如果我们在不修改ltpstress.sh直接进行压力测试时,CPU使用率一般会是90%左右,内存会是60%左右,但也不是绝对的。不过怎么说,这个可能不能满足我们的场景要求。我们首先分析一下ltpstress.sh如何设置cpu和内存压力的。ltpstress.sh是用genload进行压力设置,genload的具体用法可以ltp/testcase/bin/genload --help查看。
假设你的内存大小通过'free -m'看到为memSize=7834M,swapSize=2048,ltpstress.sh默认分配压力内存大小为stress_mem=memSize+1/2swpSize;分配的压力进程数为stress_mem/1024=7834+1024/1024=8(整数),那么ltpstress.sh就会创建8个线程,每个线程分配1024MB的内存大小给线程,剩下的内存大小用于操作系统运行和测试用例执行,这样就实现了对系统施压。
上面的测试场景并不能保证所用cpu和内存的利用率达到我们想要的数值。
1.比如说,如果一个服务器有48个cpu,但只有8G内存,采用ltpstress.sh默认的测试场景,cpu不一定能达到很好的压力效果;
2.假设cpu压力值达到90%以上,但内存利用率不一定到80%以上,因为内存利用率还跟系统的swap分区,buffer、cache、系统保留内存、内存调用机制等有联系。
解决上面问题的办法:
1. 修改genload运行参数
2.修改内存访问策略
三.自定义场景
1.首先确定cpuNum=cpu个数,memSize=内存大小,swpSize=swap分区大小。ltpstress测试用例运行需要2G以上,因此如果swpSize<=4G,那么进行ltpstress.sh压力就会可能造成内存Out of Memory,系统会采用OOM_killer机制杀掉占用内存较大的进程。造成mem利用率大幅降低,此时需要单独指定stress_mem内存大小,stress_mem<memSize + swpSize - 3G。修改方法
./ltpstress.sh -m stress_mem
2.genload参数设置,根据需求对cpu进行施压,在
genload --vm $PROC_NUM --vm-bytes 1073741824 2>&1 1>/dev/null &前面添加
genload -c cpuNum 2>&1 1>/dev/null &
添加此项的目的就是对所有cpu进行施压
3.针对内存使用率低的问题,修改原则:降低内存和swap的交换频率;提高buffer和cache的sync频率。编辑/etc/sysctl.conf,添加
vm.dirty_background_ratio=10
vm.dirty_ratio=10
vm.dirty_expire_centisecs=100
vm.dirty_writeback_centisecs=200
vm.drop_caches=3
vm.cache_pressure=133
vm.swappiness=10 # 表示最大限度的使用内存,然后才是交换分区
4.对于某些操作系统,设定了LowMem,sysctl -a |grep lowmem_reserve_ratio可以看到系统保留的内存大小,这部分内存,在进行ltpstress.sh测试时不一定能用到。假如LowMem=256M,系统内存为2048M,那么系统内存利用率最大在87%(平均值,有可能比这高)
来源:oschina
链接:https://my.oschina.net/u/1041865/blog/170265