ltpstress.sh-场景设置

不打扰是莪最后的温柔 提交于 2020-05-02 12:04:54

    我们常用用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%(平均值,有可能比这高)

 


 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!