咱们经常使用用LTP的ltpstress.sh脚本测试Linux的稳定性,如下将探讨一下如何好的进行Linux压力测试。 服务器
一.如何对内核进行压力测试? app
在进行压力测试以前,咱们先思考一下压力测试要达到那些要求,才能说明Linux的稳定性。既然是压力测试,那么必然是超负荷测试,所以通常咱们会对CPU、内存等使用率要求80%以上;另外一个测试覆盖度。LTP已经为咱们提供了测试用例,所以咱们不用去考虑测试的覆盖度,那么咱们关注的就是如何设置CPU和内存的压力。 测试
二.ltpstress.sh默认测试场景 spa
一般咱们在进行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、系统保留内存、内存调用机制等有联系。 it
解决上面问题的办法: io
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%(平均值,有可能比这高)