Locust - 压测 WebSocket 连接数超 1024 报错

在使用Locust进行WebSocket压力测试时遇到并发连接数受限于1024的问题。文章分析了错误可能源于`select()`函数限制,并探讨了Linux的I/O技术。建议使用epoll或AIO来提高并发性能。同时,通过调整系统参数如`kern.maxfiles`和`kern.maxfilesperproc`,以及改变端口范围,可以优化测试机的连接数。
摘要由CSDN通过智能技术生成

一、错误信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、错误可能性分析及处理

locust 官方解释(与locust无关)

2-1 使用 select() 支持并发连接数有限

在Linux上编写高并发TCP连接应用程序时,必须使用合适的网络I/O技术和I/O事件分派机制。

可用的I/O技术有同步I/O,非阻塞式同步I/O(也称反应式I/O),以及异步I/O。在高TCP并发的情形下,如果使用同步I/O,这会严重阻塞程序的运转,除非为每个TCP连接的I/O创建一个线程。但是,过多的线程又会因系统对线程的调度造成巨大开销。因此,在高TCP并发的情形下使用同步 I/O是不可取的,这时可以考虑使用非阻塞式同步I/O或异步I/O。**非阻塞式同步I/O的技术包括使用select(),poll(),epoll等机制。**异步I/O的技术就是使用AIO。

从I/O事件分派机制来看,使用select()是不合适的,因为它所支持的并发连接数有限(通常在1024个以内)。如果考虑性能,poll()也是不合适的,尽管它可以支持的较高的TCP并发数,但是由于其采用“轮询”机制,当并发数较高时,其运行效率相当低,并可能存在I/O事件分派不均,导致部分TCP连接上的I/O出现“饥饿”现象。而如果使用epoll或AIO,则没有上述问题(早期Linux内核的AIO技术实现是通过在内核中为每个I/O请求创建一个线程来实现的,这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题。但在最新的Linux内核中,AIO的实现已经得到改进)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter是一款功能强大的性能测试工具,可以用于进行长连接压测。下面是使用JMeter进行长连接压测的步骤: 1. 安装JMeter:首先,你需要下载并安装JMeter。你可以从JMeter官方网站(https://jmeter.apache.org/)上下载最新版本的JMeter。 2. 创建线程组:在JMeter中,你需要创建一个线程组来模拟并发用户。右键点击测试计划,选择"Add" -> "Threads (Users)" -> "Thread Group"来创建线程组。 3. 配置线程组参数:在线程组的属性中,你可以设置线程数、循环次数、启动延迟等参数。根据你的需求进行配置。 4. 添加Sampler:Sampler用于发送请求。右键点击线程组,选择"Add" -> "Sampler"来添加Sampler。根据你的需求选择合适的Sampler,比如HTTP Request。 5. 配置Sampler参数:在Sampler的属性中,你需要设置请求的URL、请求方法、请求头、请求体等参数。根据你的需求进行配置。 6. 添加监听器:监听器用于收集和展示测试结果。右键点击线程组,选择"Add" -> "Listener"来添加监听器。比如,你可以选择"View Results Tree"来查看请求和响应的详细信息。 7. 配置监听器参数:在监听器的属性中,你可以设置保存结果的文件路径、显示结果的格式等参数。根据你的需求进行配置。 8. 运行测试计划:点击JMeter工具栏上的"运行"按钮来运行测试计划。JMeter将模拟并发用户发送请求,并收集和展示测试结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值