zoukankan      html  css  js  c++  java
  • 利用locust进行压测,检验一下之前搭建的性能监控平台

    利用locust进行压测,检验一下之前搭建的性能监控平台

    不写一行代码,搭建性能监控平台:https://www.cnblogs.com/fccyccf/articles/13161975.html

    小试牛刀:

    本次压测对象:

    t3-要素服务(要素服务是为了为各个系统提供原被告要素表的系统,主要流程就是填写原被告要素表,同步至各系统)

    服务器:xxx.xx.xx.xx(服务器资源不足,这里只是为了试验一下,得记录一下服务器本身状态,红框里就是本次要压测的对象)

    locust脚本:(由于该项目的流程很简单,我就直接用locust写了脚本来压测,这里贴一下脚本)

    有对locust感兴趣的可以自行了解一下,之前我也有发关于locust的帖子,但是locust更新的挺快的,之前的一些语法有些已经被弃用了...

    from idna import unicode
    from locust import HttpLocust, TaskSet, task, User, HttpUser, between
    import json
    import uuid
    import os
    import time
    ​
    ​
    class MyTasks(TaskSet):
    ​
        header = {"Content-Type": "application/json", "systemid": "yanpan", "authcode": "7ef54175f9d97b7ed26aeb2b5f121f40"}
        ygdatas = json.load(open('ygys.json', 'r', encoding='UTF-8'))  #原告要素表
        bgdatas = json.load(open('bgys.json', 'r', encoding='UTF-8'))  #被告要素表
        def get_bh(self):
            bh = ''.join(str(uuid.uuid4()).split('-'))  # 通过python生成uuid
            return bh
    ​
        def get_bhAJ(self):
            bhAj = ''.join(str(uuid.uuid4()).upper().split('-'))  #通过python生成uuid
            return bhAj
    ​
        #获取要素填写的前端页面(为了使场景更真实一点)
        def GetYsui(self):
            self.client.get('http://xxx.xx.xx.xx:8000/lhjf-yg?ygsf=2&systemid=yanpan&authcode=7ef54175f9d97b7ed26aeb2b5f121f40&ay=9015&ssdw=1&jbfy=2400&bhAj=298C0D590F06D08DD773BAF9C7C49049&dsr=FD63B3C0D12A78A58DCF6D6A6C4D4A78&gldsr=&sfkbj=1&dc=1&dy=1&zc=1&bc=1&qrtj=1&gbgwdt=1&fymc=%E6%B9%96%E5%8D%97%E7%9C%81%E9%AB%98%E7%BA%A7%E4%BA%BA%E6%B0%91%E6%B3%95%E9%99%A2001&ah=%EF%BC%882018%EF%BC%89%E6%B9%98%E6%B0%91%E5%88%9D696%E5%8F%B7&time=1593599607909&ywlx=30100',headers=self.header)
    ​
        #填写原告要素表
        def Writeygysb(self, ygdatas):
            # 填写原告要素表
            self.GetYsui()
            time.sleep(1)
            self.client.post("http://xxx.xx.xx.xx:8000/yaosu/api/v1/ys", headers=self.header, data=ygdatas)
    ​
        #填写被告要素表
        def Writebgysb(self, bgdatas):
            # 填写被告要素表
            self.GetYsui()
            time.sleep(1)
            self.client.post("http://xxx.xx.xx.xx:8000/yaosu/api/v1/ys", headers=self.header, data=bgdatas)
    ​
    ​
        #清除库里由于压测添加的脏数据
        def delete(self, bhAJ):
            params1 = {"bhAj": bhAJ, "ssdw": "1"}
            self.client.delete(f'http://xxx.xx.xx.xx:8888/api/v1/ys?{bhAJ}&ssdw=1',params=params1, headers=self.header)
            params2 = {"bhAj": bhAJ, "ssdw": "2"}
            self.client.delete(f'http://xxx.xx.xx.xx:8888/api/v1/ys?{bhAJ}&ssdw=2',params=params2, headers=self.header)
    ​
        @task      #压测任务,将流程串联起来(获取前端页面-填写原被告要素表-清楚脏数据【这里清楚脏数据替代了同步的操作】)
        def YsPressureTest(self):
            # 填写原告要素表
            bh = self.get_bh()
            bhAj = self.get_bhAJ()
            self.ygdatas["bhAj"] = bhAj
            self.ygdatas["bh"] = bh
            self.bgdatas["bhAj"] = bhAj
            self.bgdatas["bh"] = bh
            ygdatas = json.dumps(self.ygdatas)
            bgdatas = json.dumps(self.bgdatas)
            self.Writeygysb(ygdatas)
            self.Writebgysb(bgdatas)
            self.delete(bhAj)
    ​
    ​
    ​
    class RunLoadTests(HttpUser):
        '''
        创建运行类
        '''
        tasks = [MyTasks]
        wait_time = between(5, 10)  #每个用户5-10秒内执行一遍流程
    ​
    ​
    if __name__=="main":
        os.system("locust -f test_load.py --web-host=127.0.0.1 --host=xxx.xx.xx.xx")
    运行脚本开始压测:

    看看压测情况走势:

    再看看服务器资源:
    二者结合是可以看到一些结论的:

      从请求来分析:在用户量达到900前,随着用户量的增加,每秒的请求数跟随着增加,但是响应时间并没随着增加。但是当用户数量达到1000时,开始出现失败的请求,响应时间也激增,且随着时间向后,失败的请求增多,呈驼峰状。这说明用户量达到1000时(忽略服务器因素,本来就不是正式的性能测试),要素服务不再稳定。

      从服务器状态来分析:压测开始时,服务器cpu资源占用一直是上升状态,用户量达到1000时达到峰值且有大幅度波动,可能与失败的请求有关,内存也有涨幅,但是较为稳定。网络速度的上传下载也是随着用户量的增加一直增加着,在用户量达到1000时达到峰值。同时也能看到磁盘的写入写出(数据库也在此服务器上)。

      当然这只是简单的进行了一个分析,这毕竟不是专门的性能测试。grafana的仪表盘的数据也没有进行一些调整,让数据更加清晰。

  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/fccyccf/p/13231546.html
Copyright © 2011-2022 走看看