什么网站做视频赚钱,南宁推广平台,网站建设费用 多少,玉林做网站的公司背景#xff1a;
使用默认的locust启动命令进行压测时#xff0c;尽管已经将用户数设置大比较大#xff08;400#xff09;#xff0c;但是压测的时候RPS一直在100左右。需要增加压测的压力。
问题原因#xff1a;
如果你是通过命令行启动的或者参考之前文章的启动方式…背景
使用默认的locust启动命令进行压测时尽管已经将用户数设置大比较大400但是压测的时候RPS一直在100左右。需要增加压测的压力。
问题原因
如果你是通过命令行启动的或者参考之前文章的启动方式 命令行 locust 库方法
因为create_local_runner会创建一个LocalRunner这个runner只有一个WorkerNode
解决方式 单机充分利用CPU每一个核心 os_start(True)指定参数True则充分利用cpu的性能否则就和之前调用create_local_runner一样。 使用os、multiprocessing完成 模拟的是命令行启动locust的操作.。local_start(True),使用locust的库方法根据CPU的核心数、线程数创建WorkerNode 多机利用多台机器的能力提高测试压力 slave_start(master_ip, master_port5557)指定主机的IP及端口号。 # -*- coding:UTF-8 -*-ProjectName : pyExamples FileName : locust_demoDescription : Time : 2024/1/4 下午11:30Author : Qredsun
import os
import socket
import psutil
from multiprocessing import Process
from locust import HttpUser, events, task, between
from locust.env import Environmentclass UserRun(HttpUser):wait_time between(min_wait0.1, max_wait0.2) # 设置task运行间隔task # 装饰器说明下面是一个任务def getuser_(self):url https://analytics.cnblogs.com/api/v1/reports # 接口请求的URL地址payload {blogId: 485117, postId: 10365033,url: https://www.cnblogs.com/happyyangyanghappy/p/10365033.html, resolution: 1920x1080,referrer: https://www.ecosia.org/, createdAt: 2024-01-04T16:17:52.241Z}with self.client.post(url, jsonpayload, catch_responseTrue) as rsp:if rsp.status_code 200:rsp.success()else:rsp.failure(f接口调用失败{rsp.json()})def current_ip():ip Noneinterfaces psutil.net_connections(kindinet4)for interface in interfaces:if interface.type socket.SocketKind.SOCK_STREAM and interface.status is not None and bool(interface.raddr):if interface.raddr.ip ! 127.0.0.1:print(interface.laddr.ip)ip interface.laddr.ipbreakreturn ipdef local_start(multiprocessFalse, master_ipNone):# 使用locust库启动web_host current_ip()web_port 8089runners []master_env Environment(user_classes[UserRun], eventsevents)if multiprocess:# 主节点master_ip web_hostmaster_port 5557master_runner master_env.create_master_runner(master_bind_hostmaster_ip, master_bind_portmaster_port)# 工作节点数量process_num psutil.cpu_count()# slavefor _ in range(process_num):env Environment(user_classes[UserRun], eventsevents)slave_runner env.create_worker_runner(master_hostmaster_ip, master_portmaster_port)runners.append(slave_runner)else:master_runner master_env.create_local_runner()runners.append(master_runner)web_ui master_env.create_web_ui(hostweb_host, portweb_port)runners.append(web_ui)master_env.events.init.fire(environmentmaster_env, runnermaster_runner, web_uiweb_ui)for runner in runners:runner.greenlet.join()def os_start(multiprocessFalse):# 使用os库启动web_host current_ip()web_port 8089master_ip web_hostmaster_port 5557master_cmd flocust -f {os.path.basename(__file__)} --web-host {web_host} --web-port {web_port} --run-time 180sprocess_num psutil.cpu_count(logicalTrue)process_list []if multiprocess:if os.name nt:# Windows 系统master_cmd f --master --master-bind-host {master_ip} --master-bind-port {master_port}process_list.append(Process(targetos.system, args(master_cmd,)))slave_cmd flocust -f {os.path.basename(__file__)} --worker --master-host {master_ip} --master-port {master_port}for _ in range(process_num):process_list.append(Process(targetos.system, args(slave_cmd,)))else:# linuxmaster_cmd f --master-host {master_ip} --master-port {master_port} --processes -1process_list.append(Process(targetos.system, args(master_cmd,)))else:process_list.append(Process(targetos.system, args(master_cmd,)))for p in process_list:p.start()for p in process_list:p.join()def slave_start(master_ip, master_port5557):# 使用locust库启动runners []# 工作节点数量process_num psutil.cpu_count()# slavefor _ in range(process_num):env Environment(user_classes[UserRun], eventsevents)slave_runner env.create_worker_runner(master_hostmaster_ip, master_portmaster_port)runners.append(slave_runner)for runner in runners:runner.greenlet.join()if __name__ __main__:# os_start(True)local_start(True)
工作效果