Pomelo压测.md

网易开源JavaScript分布式服务器架构Pomelo
中文文档

Pinus一个基于Node.js的分布式水平扩展游戏服务器轻量级强大框架 powered by TypeScript
链接

项目对服务器架构进行长久布局,采用网易的分布式游戏服务器Pomelo,需要对Pomelo性能进行压力测试

环境准备

下载pomelo chat聊天室源码,初始化后做如下修改:

  • 修改game-server/app.jsheartbeat : 3000000,避免压测时因心跳超时而断线
  • 修改game-server/config/servers.json,所有服务器只保留第一个配置,我们只测试单服单进程的负载
  • 修改web-server/public/js/client.js代码传送门
  • 修改game-server/config/log4js.json,将levels下所有的log配置都修改为ERROR(如下),减少后台打印量,避免大量IO影响压测
    1
    2
    3
    4
    5
    6
    7
    8
    9
    "levels": {
    "rpc-debug" : "ERROR",
    "pomelo" : "ERROR",
    "pomelo-admin" : "ERROR",
    "console" : "ERROR",
    "pomelo-rpc" : "ERROR",
    "rpc-log" : "ERROR",
    "forward-log": "ERROR"
    },

测试方法:

  1. 进入http://127.0.0.1:3001/
  2. 聊天内容匹配profile频率_持续时间,则发起压测;频率为每秒发送消息数量,持续时间为压测持续时间。profile100_5表示每秒100条消息,持续压测5s
  3. 在压测过程中可以用perf工具对node进程进行profile并生成火焰图,profile参考文档

压测数据记录情况


虚拟机压测,配置如下:

ubuntu-18.04.1-desktop-amd64

Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz

RAM: 3.00G

发包频率 connector_cpu chat_server_cpu
0 0 0
10 1 1
100 5 1
500 28 6
1 000 50 10
2 000 85 20
2 500 95 25

物理机压测,配置如下:

Windows 10 专业版 x64

Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz 2.81GHz

RAM: 8.00G

发包频率 connector_cpu chat_server_cpu
0 0 0
500 6 3
1 000 7 3
2 000 15 6
5 000 33 9
8 000 30 8

当频率=8000,持续时间=30的时候,一共用了140s才将包全部处理完毕,此时的qps为 8000 * 30 / 140 = 1714。虽然此时的cpu并不是满载,但是吞吐量上不去了,Windows下测试比较奇怪。当频率=3000,持续时间=30的时候, qps为3000。当频率=4000,持续时间=30的时候,qps=2608;

在ubuntu物理机测试结果最高qps也是3000多

在虚拟机ubuntu中,频率=1000, connector cpu=50,利用perf工具和FlameGraph生成的火焰图

火焰图

perf.data文件

easy node profile

目前profile结果还未中的代码还基本未涉及到代码逻辑部分,基本是框架底层固有消耗,还做不到去优化逻辑来提高qps。

总结

在windows物理机和ubuntu物理机下,chat案例的connector最高的qps大约都在3000多

相对而言,系统的瓶颈是connector,压测中connector的cpu大约是game-server cpu的4倍

如果4个connector对应一个chat-server,chat-server qps预计能接近1W

这个这个性能作为棋牌游戏的服务器已经足够,如果作为MMO服务器则略显性能不足,需要用更高效的架构

附上官方测试文档,性能与我们测试的情况相差不大,connector cpu基本上是game-server的4倍

附pomelo rpc性能测试

附pomelo rpc zeromq性能测试