2017年3月,腾讯正式于全平台上线了《龙之谷》手游,次日冲到了App Store畅销排行第二的位置,并维持到了现在。上线当日百度指数超过40万,微信游戏平台数据显示预约数780多万,而据内部人员透露当日新进用户200W+,这就是《龙之谷》手游在安卓平台上所取得的成绩。

较高的市场期待让腾讯测试团队对《龙之谷》手游的测试倾尽全力,面对“经典IP”和盛大游戏一贯口碑,腾讯测试团队对游戏服务器进行了严格的压力测试,上线后服务器稳定的表现也证明了测试团队的用心没有白费。

本文记录了《龙之谷》手游压测过程中的点点滴滴,希望给其他手游的压测提供思路、方法和工具的借鉴。


一、项目背景

测试需求产生

《龙之谷》手游初期性能并不好,无法同时支持大量玩家同时进行游戏,存在卡顿、无法登录、掉线等一系列性能问题。无论从玩家流失率的降低,还是游戏体验的提升,针对该游戏的性能测试迫在眉睫。

技术难点

为了产生足够的服务器压力,《龙之谷》手游测试团队选择与腾讯WeTest合作,使用了其服务器性能测试专家模式的代码开发,产生与客户端行为相似的机器人对游戏服务器产生压力,并且有针对性的配置机器人的行为用于测试容易产生问题的场景,可视化的获取性能数据后进行分析。

由于机器人侧需要模拟客户端的逻辑向服务器进行发包,所以必须理解其游戏协议并融入腾讯WeTest测试框架中,在腾讯WeTest专家的帮助下,使用针对google protobuf协议的代码模板自动化生成工具,成功实现模拟客户端的机器人开发,并产生最高每秒并发上万的压力。

另一方面,由于游戏比较重度,压测的场景选择与用户的行为分析也成为难题。在专家的建议下,通过分析删档测试时服务器各协议频率数据,分别按协议比率的多少、处理时间长短、筛选出待测的场景与重点协议。主要针对登录、好友、交易所、主城、语音、单人pk、英雄战场、赛马、世界boss、在线副本以及数据库等进行了重点调试及压力测试。

二、实现方案

测试的目标

容量测试:

√  单服并发用户数:XXX人

√  各协议响应时间:<1秒

√  事务成功率:>99.9%

稳定性测试:

综合场景压测48小时无问题,关注各系统资源稳定性

关键场景压力测试:

√  登录、主城、世界boss等

√  各协议响应时间:<1秒

√  事务成功率:>99.9%

测试前的分析

一般压测模型由三部分组成,机器人、服务器和数据库,游戏服务器主要是优化热点游戏逻辑、协议栈参数、系统网络参数、同步机制等。数据库是优化sql语句,优化索引,优化数据存储等。机器人部分由平台自动分配压力机,如未产生明显bug,无需进行调优。

在架构分析之后,需要构建机器人模型,模型构建方法一般是根据研发打点数据,统计在一段时间内,删档服各单个协议总数与耗时并计算压力值与百分比:

示例数据如下:

删档服不同时间点各单个协议总数与耗时并计算压力值与百分比示例

需要注意的是,除了关注占比靠前的协议进行调试,另外需关注平均耗时较长的协议中逻辑是否存在优化空间,因此该类耗时较长的协议也在测试范围之内。

在获取模型并开发完机器人之后,可以通过腾讯WeTest服务器性能测试产生压力,通过其提供的网卡性能图中包量和流量的分析来判断压力机器人模型是否有效反应了真实玩家的行为。

主要的测试功能

● 登录、创建角色、进主城、新手引导压测

● 主城移动、聊天、做任务、装备升级压测

● 好友操作、技能升级、副本战斗、世界boss压测

● PVP、PVE、天空竞技场、活动压测

● 组队、购买物品、抽宠物、交易所、公会压测

● 针对以上场景的综合压测

测试中遇到的问题

类型一:单协议场景支持并发过低,该类场景集中触发时,会发生同服玩家卡顿、无法登录游戏、掉线等问题。如登录、技能升级、装备强化等。

类型二:部分热点场景如主城、世界boss支持人数不足,易发生玩家集体卡顿、掉线等问题。

类型三:其他在高并发长时间运行下容易出现的问题:缓冲区不足、进程崩溃、内存泄露等。

优化的方法

类型一:单场景问题排查

在机器人开发完毕后,可以通过腾讯WeTest服务器性能测试专家模式中的单场景测试,逐步增加场景压力,若发生:服务器进程cpu资源耗尽、回复消息过慢、回复消息失败,则表示服务器到达瓶颈,此时一般可通过系统工具(top、perf、iostat、vmstat等)排查热点逻辑,查看是否存在优化空间,或从逻辑机制上解决。

热点逻辑排查(业务名已隐去)

图中展示了简单场景中,QueryGate请求无法满足并发量100的要求,遇到这种情况,一般可以使用perf排查服务器热点逻辑进行优化。

类型二:容量测试问题排查

综合场景一般包括之前筛选出的所有场景,将所有玩家按照一定比例(比如60%在主城,40%在副本战斗),该比例一般可以通过不同场景下的心跳包频率比例看出。

主要会遇到的问题为:游戏卡顿、玩家掉线等,该类问题一般为客户端或服务器各进程资源遇到瓶颈所致。排查方法与单场景类似,不再过多描述。

各场景的数据表现(事务名已隐去)

类型三:稳定性测试问题排查

稳定性测试中易出现服务器宕机、内存泄露等情况,针对服务器宕机,一般通过gdb分析core文件,并结合所测场景的机器人行为进行分析宕机原因。

通过查看稳定性测试中的内存变化曲线,可以判断服务器内存是否稳定或泄露,若发生泄露,一般可通过内存检测工具,如valgrind等对服务器进程进行排查。

三、最终效果

测试效果

解决各种宕机、卡顿、掉线问题:

测试期间共发现并修复各类卡顿、宕机、掉线、无法进行游戏等问题20余个,同时准确估算了线上玩家所产生的压力,为最终服务器的部署及稳定运行提供了性能保障与数据支撑。

解决需要多人参与、团战等场景的测试问题:

机器人程序可以用于需要大量用户参与的测试场景,进行自动化测试及验证该类场景是否可以在一定压力下稳定运行:如世界boss战,公会战、跨服擂台赛等。

录像效果

主城移动测试

世界boss测试

英雄战场多人对战测试


“外网问题无小事”,所幸这次《龙之谷》手游上线过程中没有出现常见的面对开服压力而服务器崩溃的事件,在这次的手游测试过程中也可以感受到游戏发行、渠道和CP对服务器承压情况越来越重视。

然而目前市场上还没有针对游戏的服务器性能检测工具,无论是开源还是商业软件都不能很好的满足游戏的专项测试需求,与此同时受限于开发周期短以及人力的问题,中小型CP往往采取编写模拟机器人进行简单的压测,测试的覆盖面窄,无法保证并发请求,造成潜伏的问题遗漏到线上。

此次腾讯测试团队正是利用腾讯WeTest的服务器性能测试功能实现模拟机器人的协议配置,最终实现了《龙之谷》手游的平稳上线。

目前腾讯WeTest的服务器性能测试功能已经开放对外,通过基于真实业务场景和用户行为进行压力测试,帮助游戏开发者发现服务器端的性能瓶颈,进行针对性的性能调优,降低服务器采购和维护成本,提高用户留存和转化率。

体验地址:http://wetest.qq.com/gaps/

如果对使用当中有任何疑问,欢迎联系腾讯WeTest企业qq:800024531

 

日新进用户200W+,解密《龙之谷》手游背后的压测故事的更多相关文章

  1. 龙之谷手游WebVR技术分享

    主要面向Web前端工程师,需要一定Javascript及three.js基础:本文主要分享内容为基于three.js开发WebVR思路及碰到的问题:有兴趣的同学,欢迎跟帖讨论. 目录:一.项目体验1. ...

  2. 微信小程序之用户数据解密(七)

    [未经作者本人同意,请勿以任何形式转载] 经常看到有点的小伙伴在群里问小程序用户数据解密流程,所以打算写一篇关于小程序用户敏感数据解密教程: 加密过程微信服务器完成,解密过程在小程序和自身服务器完成, ...

  3. Unity模拟龙之谷人物行走简单控制

    我个人挺喜欢龙之谷(DN)的人物控制的(不是广告哈....),就是人物太萌了一点,动作.打击感都挺好的. 今天用Unity简单模仿了一下DN的人物控制,当然,游戏里面动作非常多,我这里仅仅做了简单的w ...

  4. 微信小程序用户信息解密失败导致的内存泄漏问题。

    微信小程序获取用户解密的Session_key 然后对 encryptedData进行解密 偶尔报错 时间长了之后会报内存溢出: java.lang.OutOfMemoryError: GC over ...

  5. 微信小程序用户数据解密

    概述 通过微信web开发者工具创建登录,获取用户信息,发送至后台,进行用户数据解密 详细 代码下载:http://www.demodashi.com/demo/10705.html 一.准备工作 1. ...

  6. Unicode编码转换, MD5加密,URL16进制加密解密

    一.站长网址:http://www.msxindl.com/ 1.Unicode与中文互转 16进制Unicode编码转换.还原   :http://www.msxindl.com/tools/uni ...

  7. jmeter系列-如何实现像loadrunner一样,多个并发用户先通过登录初始化,然后做并发的接口性能压测

    自动转开发后,就很少关注性能测试方面的东西,最近在帮朋友做一个性能压测,由于朋友那边的公司比较小,环境比较简单,而且是对http服务进行的压测,所以最终 选用了jmeter来实现这个压测. 如下就是我 ...

  8. 京东全链路压测军演系统(ForceBot)架构解密

    摘要:全链路压测是应对电商大促容量规划最有效的手段,如何有效进行容量规划是其中的架构关键问题.京东在全链路压测方面做过多年尝试,本文转载京东商城基础平台技术专家文章,介绍其最新的自动化压测 Force ...

  9. 手游LTV(用户终生价值)计算公式

    在承接APP推广项目中,手游价值变现最直接,核心是获取更多的充值,其中LTV(Lifetime-Value生命周期价值)是一个重要参考指标,可以理解为玩家在其生命周期内对游戏的平均贡献值,为什么要计算 ...

随机推荐

  1. WPF开发进阶 - Fody/PropertyChanged(二)

    前一篇 简单的介绍了Fody/PropertyChanged的使用方法, 这一篇,我们详细介绍它的一些比较重要的特性和规则 1. Attributes 通过在类或属性上标记这些特性,可以在编译代码时, ...

  2. MiniProfiler工具介绍

    MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序.可以对一个页面本身,及该页面通过直接引用.Ajax.Iframe形式访问的其它页面进行监控 ...

  3. 使用python制作ArcGIS插件(2)代码编写

    使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...

  4. linq左连接查询加上into后怎么查询右表是否为空

    //判断右表是否为空并为映射表进行赋值标志var query=from q in product join m in favProduct on q.Name equals m.Name into t ...

  5. executssql 函数的每一句代码的意思

    Public Function Executesql(ByVal sql As String, Msgstring As String) As ADODB.Recordset Dim cnn As A ...

  6. PickerController 添加照片---iOS

    前言 添加照片我们常用的地方有,更换头像,发布状态,朋友圈的时候等等,那我们接下来看看怎么添加上照片吧~ github: 效果图: 正文 1.你可以直接写,也可以声明一个属性.我习惯声明一个属性. @ ...

  7. 【译文】什么是Docker

    What is Docker? By Tim Butler • 14 May 2015 • https://www.conetix.com.au/blog/what-is-docker Unless ...

  8. phpcms代码读取文章的内容 实用可行的方法

    在使用phpcms做网站的时候经常遇到读取网站的内容作为推荐,而不是描述.这里使用可行的方法交你如何读取内容推荐.方法有两个,第一种执行的效率低,第二个效率高些. 1. {pc:get sql=&qu ...

  9. 常用php时间函数用法汇总

    1.设置时区的方法: php5后都要自己设置时区,要么修改php.ini的设置,要么在代码里修改. 在PHP.INI中设置时区 date.timezone = PRC 在代码中设置时区 1 date_ ...

  10. Oracle 11g 删除归档日志

    工作环境ORACLE 11g 归档日志满了,手动删除出现 ora 异常. 注:工作环境是linux redhat 5 执行命令如下: 1. 进入rman 2. connect target / 3. ...