python百万级并发_百万级别长连接,并发测试指南

本文介绍了如何进行百万级长连接和并发测试,使用Python的gevent与Golang进行后端服务实现,locust作为客户端测试工具。详细讲述了系统调优、硬件与软件配置,以及测试步骤,包括内核参数优化、客户端和服务器端的配置调整。测试结果显示长连接可达到200w请求,每秒约1800请求,而并发测试达到16000请求/秒,但受限于内核和宿主机性能。
摘要由CSDN通过智能技术生成

前言

都说haproxy很牛x, 可是测试的结果实在是不算满意, 越测试越失望,无论是长连接还是并发, 但是测试的流程以及工具倒是可以分享分享。也望指出不足之处。

100w的长连接实在算不上太难的事情,不过对于网上关于测试方法以及测试工具的相关文章实在不甚满意,才有本文。

本文有两个难点,我算不上完全解决。

后端代码的性能.

linux内核参数的优化.

环境说明

下面所有的测试机器都是基于openstack云平台,kvm虚拟化技术创建的云主机。

由于一个socket连接一般占用8kb内存,所以百万连接至少需要差不多8GB内存.

建立长连接主要是需要内存hold住内存,理论上只需要内存就足够了,不会消耗太多cpu资源, 相对内存而言.

而并发则对cpu很敏感,因为需要机器尽可能快的处理客户端发起的连接。

本文的并发主要指每秒处理的请求.

硬件配置

类型

配置

数量

后端

16核32GB

1

客户端

2核4GB

21

软件配置

类型

长连接

并发

后端

python && gevent

golang

客户端

locust && pdsh

locust & pdsh

IP地址

haproxy 192.168.111.111

client-master 192.168.111.31

client-slave 192.168.111.1[13-32]

测试步骤

系统调优

最大文件打开数

进程数

socket设置

客户端

在/etc/sysctl.conf加入以下内容

# 系统级别最大打开文件

fs.file-max = 100000

# 单用户进程最大文件打开数

fs.nr_open = 100000

# 是否重用, 快速回收time-wait状态的tcp连接

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

# 单个tcp连接最大缓存byte单位

net.core.optmem_max = 8192

# 可处理最多孤儿socket数量,超过则警告,每个孤儿socket占用64KB空间

net.ipv4.tcp_max_orphans = 10240

# 最多允许time-wait数量

net.ipv4.tcp_max_tw_buckets = 10240

# 从客户端发起的端口范围,默认是32768 61000,则只能发起2w多连接,改为一下值,可一个IP可发起差不多6.4w连接。

net.ipv4.ip_local_port_range = 1024 65535

在/etc/security/limits.conf加入以下内容

# 最大不能超过fs.nr_open值, 分别为单用户进程最大文件打开数,soft指软性限制,hard指硬性限制

* soft nofile 100000

* hard nofile 100000

root soft nofile 100000

root hard nofile 100000

服务端

在/etc/sysctl.conf加入以下内容

# 系统最大文件打开数

fs.file-max = 20000000

# 单个用户进程最大文件打开数

fs.nr_open = 20000000

# 全连接队列长度,默认128

net.core.somaxconn = 10240

# 半连接队列长度,当使用sysncookies无效,默认128

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_syncookies = 0

# 网卡数据包队列长度

net.core.netdev_max_backlog = 41960

# time-wait 最大队列长度

net.ipv4.tcp_max_t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值