V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
goforwardv2
V2EX  ›  程序员

游戏服务后端(TCP Server),一般用什么工具做压测?

  •  1
     
  •   goforwardv2 · 167 天前 · 4248 次点击
    这是一个创建于 167 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最前面放的 haproxy ,后面是各种 TCP server 。包括接入服务器,其他逻辑服务器。HTTP 有很多压测工具,ab/wrk 等。但是 TCP Server 一般都是自己写个简易客户端,在一台电脑上启动大量的客户端来压测,效果一般,并且客户端进程开多了,本身容易把测试机资源打满了。

    32 条回复    2024-07-08 10:53:07 +08:00
    zx900930
        1
    zx900930  
       167 天前
    jmeter tcp sampler
    测试机资源打满了是测试机的问题,该加资源就得加资源
    coderxy
        2
    coderxy  
       167 天前
    jmter locust ?
    XSDo
        3
    XSDo  
       167 天前
    游戏很多请求是有逻辑的 没有 http 接口测试那么简单,优化下自己写的压测客户端 一般没有啥问题,最多开多机台机器去压测
    htxy1985
        4
    htxy1985  
       167 天前
    当年我们草台班子就是自己写的简易客户端,可以深入到具体的业务逻辑中,模拟真人行为。下班后用大家的机器,一个机器开 N 个进程进行模拟测试。单个测试机,感觉再大的资源也是有限的,另外资源也有限,申请不下来那么好的测试机。
    ugpu
        5
    ugpu  
       167 天前
    不是写机器人压测吗? 这还能有专业工具?
    Jinnrry
        6
    Jinnrry  
       167 天前 via Android   ❤️ 2
    直接公测,让玩家帮忙测试
    MoYi123
        7
    MoYi123  
       167 天前
    只能专门写个游戏 bot 吧.
    guyeu
        8
    guyeu  
       167 天前
    都有服务端了,那肯定是有客户端的,在已有客户端的基础上封装一套 bot 来跑压测并不复杂。
    我比较想知道 TCP 的话就不是 request-reply 那种消息模型了吧,传统的响应延时这种指标就不太好使了,你们用哪些指标来评估服务器的性能表现呢?
    shuax
        9
    shuax  
       167 天前
    自己单独写个 TCP Client 压测,我一般用 python asyncio 写写。
    goforwardv2
        10
    goforwardv2  
    OP
       167 天前
    @XSDo 是的 想模拟几十万级别的 TCP 连接,估计只能用多台机器了
    goforwardv2
        11
    goforwardv2  
    OP
       167 天前
    本质上是模拟几十万级别左右的 TCP 高并发,而且每个 TCP 连接都有自己的消息交互逻辑,并不是简单的 ping-pong ,看了大家的回复,只能是找多台机器一直开简易客户端了(就是机器人了)。比较好奇的是,大家平时压测的机器,比如 8 核 16G 的大概最多同时开多少个机器人
    qishua
        12
    qishua  
       167 天前
    用云厂商的 pts 压测,按量的,实现你的并发压测需求,最多也就花个几十块钱
    shuax
        13
    shuax  
       167 天前   ❤️ 1
    几十万的目标订得太大了吧,说点难听的,在线几十万的游戏,不会来问这个问题。
    goforwardv2
        14
    goforwardv2  
    OP
       167 天前
    @shuax 肯定没有这么多,就是自己模拟下这么大的并发下,会有哪些问题,也想学习下
    Dream95
        15
    Dream95  
       167 天前
    jmeter 太老了,线程模型一直没有更新。阿里云有个 PTS 服务可以研究下
    chensuixiang
        16
    chensuixiang  
       167 天前
    以前我是手写的,现在我推荐 k6 。强大且灵活,特别适合开发人员。
    mightybruce
        17
    mightybruce  
       166 天前
    locust + boomer 值得拥有,写一点相关代码可以对各种类型协议做分布式压测

    locust master 只负责数据的收集和消息的广播等操作
    bommer 是具体的发压机器
    future0906
        18
    future0906  
       166 天前
    游戏服务器不是纯协议的,都是有系列逻辑的,通用工具基本没用。如果是服务器程序自己写用例的,可以直接用服务器作为机器人载体,再利用服务器的部署能力去做集群压测。顺便指标啥的也可以走服务器的收集工具。

    如果没有的话,建议 k8s+压测脚本。
    redbule
        20
    redbule  
       166 天前
    自己写 bot 压测
    goforwardv2
        21
    goforwardv2  
    OP
       166 天前
    @future0906 是的 之前都是写一个客户端机器人,然后脚本批量启动,但需要好几台机器才能模拟 10 万级别的并发,因为批量启动客户端也很占用资源,开的太多,效果反而不好,只能多台,一台开 1 万
    goforwardv2
        22
    goforwardv2  
    OP
       166 天前
    @mightybruce 嗯 我看下
    goforwardv2
        23
    goforwardv2  
    OP
       166 天前
    现在的方式都是堆机器模拟客户端压测,本来想着看有没有 ab/wrk 这种,找一个性能可以的机器就可以了,通过大家的回复来看,可能还是客户端 bot 更符合场景,有做过相关的大佬,也可以说下自己的场景
    htxy1985
        24
    htxy1985  
       166 天前
    我们之前是一台普通开发机器模拟 1000-2000 ,找十台机器压到 2W 同时在线,这也是当时我们的单服承载理论上限。
    开测压出很多问题来,这个测试很有必要。
    tool2dx
        25
    tool2dx  
       166 天前
    windows 开不到那么大,也就几千 TCP 。

    用 linux 单机上万连接完全没问题的,就是你需要把游戏协议移植到 linux 上运行。
    goforwardv2
        26
    goforwardv2  
    OP
       166 天前
    @tool2dx 嗯 windows 和 linux 都试过,反正想模拟几万的带具体逻辑的高并发,就是要堆机器
    goforwardv2
        27
    goforwardv2  
    OP
       166 天前
    @htxy1985 非常具有参考价值,单台 linux 的如果只是 ping-pong ,5 万都可以,但加上游戏的具体逻辑,2 万很不错了
    future0906
        28
    future0906  
       166 天前
    @goforwardv2 一台机器跑带逻辑的机器人根本跑不到 1W ,除非 50 core+

    20W 的 PCU 都是几百 cores 跑的,所以性价比最高还是跑 docker 或者 k8
    fatigue
        29
    fatigue  
       166 天前
    看你想测啥,测逻辑就服务端机器人,测网络登录交互这些就录包发包就行了,没听说过堆机器开客户端的。要针对性测试
    nightwitch
        30
    nightwitch  
       166 天前
    除了卡牌游戏没见过游戏服务端能承载十万人的...

    看瓦罗兰特分享的数据,一个服务器跑 100+个 Instance ,性能就开始稳不住了(一个 Instance 也就 5v5 对局,10 个玩家)
    https://technology.riotgames.com/news/valorants-128-tick-servers
    cabing
        31
    cabing  
       166 天前
    用 go 写个。超级简单啊~
    nevermoreluo
        32
    nevermoreluo  
       164 天前
    1. 我可能遇到的水平不高都是 client 端写的,服务端要出文档,到时候联运方(或者叫推广方)压测也是拿文档和机器人他们自己写了测的。
    2. 刚开始不要想单组架构十万吧,都是自动扩展堆机器的。哪怕是手动扩展的方案也是方案,华夏滚服的概念又不是不能用,赚钱不寒碜。自动扩展也不用都做到,网关这种手动开了,能通过 haproxy (不过你这个 haproxy 如果是单台也是个单点故障)动态调整就好了,主要是游戏逻辑服角色服场景(关卡)服之类的需要自动扩展,个人感觉单台承受 3~5k 活跃其实就差不多了。
    3. 单组服务要吃几十万,我感觉找个大哥从头到脚优化完游戏都凉了。沉淀一套自动扩展和应急补偿方案才是主要的。真要到需要压缩单组几十万的时候,先优化消息大小才是关键,带宽比机器贵都是钱,先扩容再花钱招大哥优化。不过我觉得到时候联运啊什么的会上门谈条件给方案的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3562 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 04:26 · PVG 12:26 · LAX 20:26 · JFK 23:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.