公司在本月下旬有个接口需要百万级并发的压测。现在正在调研工具,初步选的是 locust。 但是查阅资料单机最高的并发数,有的说是 300,有的说 1000,有的说 60000+,有实际使用过的同学吗?
看机器性能吧,自己试,httpuser 跟 fasthttpuser 差距很大的;本地多核启动跟单核启动也有差距;最后,百万级并发,一定是需要多机的,多少台机器需要看你测试结果
机器配置不一样,能够支持的并发数也不同。对单机能支持 60000+ 表示非常可疑。一般用 jmeter 比较多吧。 百万级肯定是分布式压测了。单机是不可能的。
你指的百分级并发, 指的是虚拟用户数还是 TPS/QPS? 类似于 Jmeter, 100 并发=100 线程. 但是 100 并发能产生几万的 QPS 也是可以的..
假如 1 个并发 (线程),1 秒内, 完成了 100 次请求 (响应时间平均 10ms), 那么这是 100 并发还是 1 并发.
我怀疑你说的并发是指的 QPS
golang
刚好最近使用 locust 进行生产持续 15 天压测,可以和你分享下一部分:
先说结论:locust 单机最高的并发是多少?这要看压力机配置。理论上如果 QPS 上不去,可以分布式机器,每台机器启 CPU 个数的 worker 来提升。
我其实是想纠正你的一个概念就是你所说的并发是指的 100WQPS, 而不是 100W 的虚拟用户数同时在线....
Locust 是基于 gevent 来模拟的虚拟用户数 (并发数), 然后模拟的 Http 请求, 根据响应的数量计算的 QPS, 也就是你描述的 100W.
Locust 的官方所说的单核 5000 8000 的也是这个指标 (QPS).
而你使用 Locust 测试的时候无法直接提供 100WQPS 去指令去测试,只能通过-c 之类的参数来提供虚拟用户数 (并发数) 来模拟请求,而这个-c 之类的参数的值, 可能是 100-200-300 等单位. 毕竟 gevent 启动的协程数量过大的话也会影响它 QPS 的施压能力..
-----------------------总而言之:
大部分开发嘴里的并发数, 其实都是 QPS/TPS 的值, 特别表明的除外.. 而测试工具不同, 提供的参数也不同, 造成的能力也会不同. 真实测的时候需要注意这点, 否则达不到官方所说的能力.
谢谢纠正,其实我理解他们的需求是,100w 用户,但是这 100w 用户不应该是同时请求,而是在某一个时间段。
谢谢宝贵的经验。另外有个问题想请教以下,每台 worker 都有自己发送请求的上线,我怎么去判断这个数量是当前 woker 的最大并发数呢?
不同的测试工具有不同的概念, 理解清楚之后才好对应入手设置参数. 对于 locust 来说, 你是需要通过命令行收入-c -n 之类的一系列的参数来启动对吧.(很久没用 Locust, 忘记具体参数名字了, 此处代指.)
回到你的问题中, 每个 worker 的最大能力对不同 API 来说是动态, 你可以使用类似于每分钟递增 x 个的方式去边测边健康, 当服务器资源正常响应并且 Locust 的单核趋于 90-100% 波动的时候, 就说明对于这个 API, 单核的最大能力要到了.