背景

今天使用 locust 分布式压测一个 grpc 协议的服务 (第一次使用 locust 咳咳),但压测过程中,发现 locust 无法通过增加并发而提高被压服务的 cpu 使用率,QPS 等。后续增加了 3 台压测客户端机器,才把服务端的 cpu 使用率压满,这明显不科学啊。。

服务器信息

1,服务端 8 核 16G
2,客户端 8 核 16G

操作过程

场景 1,使用 700 并发,7 个 nodes 执行

locust -f grpc_test.py --master --headless --master-bind-host xxx --expect-workers=7 -u 700 -t 180s -r 700
被压服务 cpu 使用率为 280% 左右

locust 进程的单核 cpu 使用率为 40% 左右

QPS:9703.14,平均耗时:2ms

场景 2, 使用 1400 并发,7 个 nodes 执行

locust -f grpc_test.py --master --headless --master-bind-host xxx --expect-workers=7 -u 1400 -t 180s -r 700
被压服务 cpu 使用率为 280% 左右

locust 进程的单核 cpu 使用率为 40% 左右

QPS: 9514.82,平均耗时:2ms

场景 3, 使用 1400 并发,14 个 nodes 执行 (压测客户端增加了一台 8 核机器,承担另外 7 个 nodes)

locust -f grpc_test.py --master --headless --master-bind-host xxx --expect-workers=14 -u 1400 -t 180s -r 700
被压服务 cpu 使用率为 550% 左右

locust 1 进程的单核 cpu 使用率为 35% 左右

QPS:17757.96,平均耗时:2ms

分析与疑问

1,在场景 1 的基础上,场景 2 增加了一倍并发数,但服务端的 cpu 使用率没有提高,QPS 没有提高,而且压测客户端的负载和 cpu 使用率还是很健康状态。
2,在场景 2 的基础上,增加了一台压测服务器,分担了其中 7 个 nodes,压力提高符合预期。
3,为什么增加并发数不能提高压力呢?但从网上看到 locust 的文章,可以百万并发哦。。是我使用方式不对?请大佬们指点指点。


↙↙↙阅读原文可查看相关链接,并与作者交流