我的编程空间,编程开发者的网络收藏夹
学习永远不晚

locust使用经验---每个任务使用新

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

locust使用经验---每个任务使用新

最近由于项目需要,在研究打压测试工具,以及当测试连接过多后端服务器配置问题

 

测试工具选用locust,locust中文意思为蝗虫,可以想象,locust就像成片的蝗虫,扑向我们的服务。

 

它支持分布式的打压测试,每个实例可自定义执行任务,执行任务可用python脚本实现,具体如何写python脚本这里就不详细介绍了,网上能搜到很多相关资料,这次的文章主要着重介绍如何实现我们的需求以及对遇到的问题分析。遇到的问题主要是两个:如何在每次执行任务都使用新的连接,大量连接时如何处理大量出现的TIME_WAIT连接

 

首先,我的测试场景是,大量的客户端会间歇性的请求服务器,并不会长时间连接,基本可以理解为每次请求都是短连接,每条连接发起一次请求后就会断开。所以首先需要解决的问题是,如何使每次执行任务都是用新的连接。

 

locust默认使用的是requests库,创建的会话默认会使用长连接,会复用连接,一条发起多次请求,这并不符合我的要求,所以在每次请求完数据后,我需要自己关闭连接。

 

关闭连接的手段有很多:

a、断开整个会话的连接
    self.client.close()
 
 
b、断开客户端连接
    r = self.client.request("post", "/api/query", data=json.dumps(payload), verify=False)
    r.connection.close()
 
c、请求时带着Connection: close头部,让服务器断开连接(在HTTP1.1协议中,Connection头部有两个值,close和keep-alive,这个头就相当于客户端告诉服务端,服务端你执行完成请求之后,是关闭连接还是保持连接,保持连接就意味着在保持连接期间,只能由客户端主动断开连接)
    r = self.client.request("post", "/api/query", headers={'Connection':'close'}, data=json.dumps(payload), verify=False)
 
不论a、b还是c,都能实现每次请求后连接断开的目的,但是引发的副作用却不一样。
因为tcp连接有一种TIME_WAIT状态,连接的主动关闭方在发送四次挥手的最后一个ACK后会变为TIME_WAIT状态,保留此状态的时间为两个MSL(linux里一个MSL为30s,是不可配置的)
 
仔细的同学可能已经发现了这里的区别,a和b方法是客户端断开连接,c是服务器断开连接,这也就决定了TIME_WAIT会在哪一端出现(前面已经说过,连接的主动关闭方会变为TIME_WAIT状态)。
抓包验证发现:
a、b方法的FIN报文都是由客户端发起的

c方法的FIN报文由服务器发起

 

如果由服务器断开连接,会导致服务器端产生大量TIME_WAIT状态的连接,这个问题直接的影响就是服务器的端口很快会被耗尽,导致客户端无法与服务器成功建立新的连接

 

而如果由客户端断开连接,经测试,测试机端很快出现上万的TIME_WAIT状态的连接,测试量根本打不上去,大量连接建立失败

 

所以我们需要调整系统的配置,来优化tcp连接的处理

如果由客户端关闭连接,需要修改的配置如下:
vi /etc/sysctl.conf
net.ipv4.tcp_timestamps=1 开启后下面的tw参数才能生效
net.ipv4.tcp_tw_reuse=1  开启重用,允许将TIME_WAIT重用与新的连接
net.ipv4.tcp_fin_timeout = 30  缩短TIME_WAIT_2到TIME_WAIT的超时时间
net.ipv4.tcp_max_tw_buckets = 256000  增大最多允许TIME_WAIT的数量
sysctl -p 使能新的配置
 
如果必须由服务器断开连接,这个问题如何优化?(参考链接:https://www.jianshu.com/p/2da62c5e10fa)
     1,尽量调大系统TIME_WAIT连接数
          net.ipv4.tcp_max_tw_buckets = 256000  最多允许time-wait数量,最大阈值
     2,调整TIME_WAIT_2到TIME_WAIT的超时时间,默认是60s,优化到30s:
          net.ipv4.tcp_fin_timeout = 30
     3,下面再说一些linux里TIME_WAIT专有的优化参数reuse、recycle,默认都是关闭的,这两个参数必须在timestamps打开的前提下才能生效使用
          注意:对于tw的reuse、recycle其实是违反TCP协议规定的,服务器资源允许、负载不大的条件下,尽量不要打开(副作用大
          net.ipv4.tcp_timestamps = 1
          net.ipv4.tcp_tw_reuse = 1
          机器作为客户端时起作用,开启后time_wait在一秒内回收
          net.ipv4.tcp_tw_recycle = 0 (建议不要开启,现在互联网NAT结构很多,可能直接无法三次握手)
          开启后在3.5*RTO(RTO时间是根据RTT时间计算而来)内回收TIME_WAIT,并60s内同一源ip主机的socket connect请求中的timestamp必须是递增的,对于服务端,同一个源ip可能会是NAT后很多机器,这些机器timestamp递增性无可保证,服务器会拒绝非递增请求连接,直接导致不能三次握手。

 

 经过权衡,最终决定,服务器暂时不开启副作用较大的tw参数,由客户端断开连接,修改客户机的配置。

 

修改后测试,16个slave实例,模拟480个用户压测查询接口,客户端与服务器均不再出现大量TIME_WAIT连接,RPS轻松上3k

服务器硬件配置较低,2核2G内存,不需要打的特别狠,满足需求即可

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

locust使用经验---每个任务使用新

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

locust使用经验---每个任务使用新

最近由于项目需要,在研究打压测试工具,以及当测试连接过多后端服务器配置问题 测试工具选用locust,locust中文意思为蝗虫,可以想象,locust就像成片的蝗虫,扑向我们的服务。 它支持分布式的打压测试,每个实例可自定义执行任务,执行
2023-01-30

使用APScheduler怎么实现一个定时任务

使用APScheduler怎么实现一个定时任务?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、安装apschedulerpip install apschedulerpi
2023-06-14

有效管理内存 Windows7系统内存高效使用的几个经验

现今使用Windows7系统的用户量非常的多,正因Windows7的功能强大,界面绚丽对系统内存的要求也是比较高的,所以我们要有效的管理系统内存,让内存在Windows7系统下高效的使用,也是正是很多用户关心的事情,那么下文将讲述几个Win
2023-06-08

微软Win8系统中运行新任务使用技巧

任务管理器  然而由于win8作为一个全新的操作系统,在操作上有不少改进,对于新接触win8的朋友或许有些不适应,简略模式,显得小巧干练,但信息太少了。在任务管理器中点击“详细信息”模式下,可以查看进程、性能、应用历
2022-06-04

亚马逊使用阿里云远程服务器的经验分享

本文主要分享了亚马逊如何使用阿里云的远程服务器,并讨论了使用过程中的优点和缺点。亚马逊是全球最大的电商平台之一,而阿里云则是全球领先的云计算服务提供商。在亚马逊的业务中,远程服务器的使用是非常重要的环节。本文将分享亚马逊使用阿里云远程服务器的经验。首先,亚马逊在使用阿里云远程服务器时,最大的优点就是速度和稳定性。
亚马逊使用阿里云远程服务器的经验分享
2023-10-29

探索阿里云服务器GUI界面一个全新的云服务使用体验

阿里云服务器GUI界面是一个易于使用的云服务器管理界面,可以让用户快速创建、管理、监控和控制阿里云服务器。本文将详细说明如何使用阿里云服务器GUI界面,包括创建服务器、安装操作系统、配置网络、添加应用和监控服务器状态等。一、创建服务器在阿里云服务器GUI界面中,用户可以通过点击“新建服务器”按钮,选择服务器类型、
探索阿里云服务器GUI界面一个全新的云服务使用体验
2023-12-09

使用Java怎么实现一个Web应用中的定时任务

使用Java怎么实现一个Web应用中的定时任务?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。定时任务,是指定一个未来的时间范围执行一定任务的功能。在当前WEB应
2023-05-30

使用Python部署机器学习模型的10个实践经验分别怎么样的

今天就跟大家聊聊有关使用Python部署机器学习模型的10个实践经验分别怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。有时候,作为数据科学家,我们会忘记公司付钱让我们干什么。
2023-06-16

怎么使用SAP Analytics Cloud统计C4C系统每天新建的Lead个数和预测趋势

怎么使用SAP Analytics Cloud统计C4C系统每天新建的Lead个数和预测趋势,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。从SAP Cloud
2023-06-03

在springboot项目中使用quartz如何实现一个定时任务

今天就跟大家聊聊有关在springboot项目中使用quartz如何实现一个定时任务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。spring支持多种定时任务的实现。我们来介绍下使用
2023-05-31

springboot项目使用SchedulingConfigurer实现多个定时任务的案例代码

这篇文章主要介绍了springboot项目使用SchedulingConfigurer实现多个定时任务,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-05

SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题

这篇文章主要介绍了SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题,需要的朋友可以参考下
2023-01-05

怎么使用Celery Once来防止Celery重复执行同一个任务

这篇文章给大家分享的是有关怎么使用Celery Once来防止Celery重复执行同一个任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用 Celery 的时候发现有的时候 Celery 会将同一个任务执行
2023-06-25

阿里云服务器个人博客的搭建与使用体验

随着互联网的发展,越来越多的人开始关注个人博客的建设。本文将详细介绍如何使用阿里云服务器搭建个人博客,以及使用体验。正文:随着互联网的发展,个人博客的建设已经成为越来越多人关注的话题。但是,如何选择服务器以及搭建博客却是一项相对复杂的工作。在这个过程中,阿里云服务器无疑是一个非常不错的选择。首先,让我们了解一下阿
阿里云服务器个人博客的搭建与使用体验
2023-10-30

如何使用MySQL和Ruby实现一个简单的任务调度功能

要使用MySQL和Ruby实现一个简单的任务调度功能,可以按照以下步骤操作:1. 安装并配置MySQL数据库:首先,确保你的系统中已经安装了MySQL数据库,并且创建了一个用于存储任务信息的数据库。然后,创建一个任务表,包含任务的名称、描述
2023-10-20

如何使用MySQL和Ruby实现一个简单的异步任务调度功能

如何使用MySQL和Ruby实现一个简单的异步任务调度功能以前的Web应用程序大多采用同步的方式来处理请求,即用户发送请求后,服务器会立即处理完请求并返回结果。然而,随着应用程序复杂度的增加,同步方式的处理效率逐渐变得低下,因此异步任务调度
2023-10-22

.NET 8新预览版使用 Blazor 组件进行服务器端呈现(项目体验)

在.NET8最新预览版中,Blazor组件首次支持服务器端呈现(SSR),实现更快的初始页面加载和更好的SEO。通过启用SSR并使用@prerender指令,Razor组件可以在服务器端呈现。客户端和服务器端逻辑可分开,通过@codebehind指令将代码移动到单独的文件中。SSR大幅提升SEO,搜索引擎可轻松爬取页面内容;同时减少初始页面加载时间,提供更流畅的用户体验。最佳实践包括:只对关键组件启用SSR、使用HTTP标头控制呈现模式、提供索引替代方案以及监控性能调整策略。
.NET 8新预览版使用 Blazor 组件进行服务器端呈现(项目体验)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录