请教大家服务器压力测试的问题

2021-10-20 16:06:55 +08:00
 ggsl
目前手里有个简单的 java 游戏服框架,我进行的压测是登录 1000 人,每个客户端每 20ms 给服务器发送一条测试消息(长度为 10 的字符串),服务器写入 redis,并返回成功;客户端不管服务器返回,一直发送。
得出结果是服务器每秒能够处理 1600 次,cpu 占用 50%左右,内存飙升 2g,10 多分钟开始客户端大批掉线。

请问大家我的测试方法对吗?这个结果能不能说明这个框架性能不好呢?谢谢各位

服务器是 4 核 cpu
2135 次点击
所在节点    程序员
8 条回复
Kinnice
2021-10-20 16:12:27 +08:00
服务器用的什么 CPU,用的什么内存,用的什么硬盘,带宽多少,你知道的其他框架在同等规模的结果
都未知
ggsl
2021-10-20 16:17:55 +08:00
@Kinnice cpu 是 4 核,其他的具体参数不太清楚,那请问我的测试方法有问题吗?
Kinnice
2021-10-20 16:32:41 +08:00
把[写入 redis]去掉 ,直接返回成功
ggsl
2021-10-20 17:51:27 +08:00
@Kinnice 好的我试下谢谢!
Zhuzhuchenyan
2021-10-20 22:55:17 +08:00
最近也在做类似的事情,可以参考一下我的方法论

1. 时间指标
- 平均响应时间
- 最大响应时间,用来衡量极端情况下的用户承受的最大延迟
- 方差,标准差,用来衡量用户承受延迟的分布
- 有能力的话可以做一个直方图,并不需要全量记录,个人感觉取 1%抽样就足够了

2. 内存指标
我用的是.net core, 一些概念可能和 java 不一样,可以类比下
- GC 次数,特别是不同代的 GC 次数
- GC 时间占总执行时间的比例
- 若是 GC 次数不正常,可以考虑间隔每段时间取堆内存的 snapshot,若是工具支持,最好可以拿到内存分布的热点图,比如这个函数这一行分配了全体的 90%的内存

在有以上数据的情况下,即使没有同类型的框架可以横向比较,也可以自己根据压测结果优化迭代,再行压测比较。
Zhuzhuchenyan
2021-10-20 23:07:03 +08:00
然后探讨下你叙述中显露出的一些问题,仅供参考

1. “登录 1000 人,每个客户端每 20ms 给服务器发送一条测试消息,长度为 10 的字符串”
不知道你的游戏框架的序列化是怎么做的,若是想要反映真实情况,仅仅用字符串来模拟肯定是不够的,建议在压测环境中引入序列化和反序列化,这样可以更多暴露出在这个过程中的内存、CPU 问题

2. “每个客户端每 20ms 给服务器发送一条测试消息”
不建议给 20ms 间隔,每个客户端直接将单个 TCP 链接打满更具备压测意义

3. “10 多分钟开始客户端大批掉线”
不知道你客户端掉线的原因是什么,若是用 TCP 的话,最好可以知道连接断开的原因然后具体分析,正常情况下掉线一定是不正常的

最后,
若是你的序列化方案就是字符串序列化,而又不想自己写压测逻辑的话,可以考虑用你的服务器结构实现一个最简单的 HTTP Server,然后用成熟的 HTTP 压测工具去压,这个不具备任何业务逻辑,但是能很好暴露出你潜在的服务器处理能力。

这里我用的 wrk, 可以参考一下我在 MacBook Pro (16-inch, 2019) 2.3 GHz 八核 Intel Core i9 下的结果,
wrk -c 400 -t 4 -d 5 http://localhost:13023/

Running 5s test @ http://localhost:13023/
4 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 3.11ms 1.25ms 38.01ms 88.82%
Req/Sec 20.08k 2.02k 23.81k 83.33%
407661 requests in 5.10s, 60.65MB read
Socket errors: connect 153, read 101, write 0, timeout 0
Requests/sec: 79880.37
Transfer/sec: 11.88MB
ggsl
2021-10-21 10:38:56 +08:00
@Zhuzhuchenyan 好的,这就着手准备搞起,感谢分享!
q428202849
2021-10-22 13:51:09 +08:00
需要服务器吗 老板

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/809247

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX