2017年3月,腾讯正式于全平台上线了《龙之谷》手游,第二天冲到了App Store畅销排行第二的位置,并维持到了如今。上线当日百度指数超过40万,微信游戏平台数据显示预定数780多万,而据内部人员透露当日新进用户200W+,这就是《龙之谷》手游在安卓平台上所取得的成绩。html
较高的市场期待让腾讯测试团队对《龙之谷》手游的测试倾尽全力,面对“经典IP”和盛大游戏一向口碑,腾讯测试团队对游戏服务器进行了严格的压力测试,上线后服务器稳定的表现也证实了测试团队的用心没有白费。ios
本文记录了《龙之谷》手游压测过程当中的点点滴滴,但愿给其余手游的压测提供思路、方法和工具的借鉴。sql
《龙之谷》手游初期性能并很差,没法同时支持大量玩家同时进行游戏,存在卡顿、没法登陆、掉线等一系列性能问题。不管从玩家流失率的下降,仍是游戏体验的提高,针对该游戏的性能测试迫在眉睫。数据库
为了产生足够的服务器压力,《龙之谷》手游测试团队选择与 腾讯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%在副本战斗),该比例通常能够经过不一样场景下的心跳包频率比例看出。
主要会遇到的问题为:游戏卡顿、玩家掉线等,该类问题通常为客户端或服务器各进程资源遇到瓶颈所致。排查方法与单场景相似,再也不过多描述。
(//blog-10039692.file.myqcloud.com/1490673569949_6733_1490673570238.png)
各场景的数据表现(事务名已隐去)
类型三:稳定性测试问题排查
稳定性测试中易出现服务器宕机、内存泄露等状况,针对服务器宕机,通常经过gdb分析core文件,并结合所测场景的机器人行为进行分析宕机缘由。
经过查看稳定性测试中的内存变化曲线,能够判断服务器内存是否稳定或泄露,若发生泄露,通常可经过内存检测工具,如valgrind等对服务器进程进行排查。
3、最终效果
解决各类宕机、卡顿、掉线问题:
测试期间共发现并修复各种卡顿、宕机、掉线、没法进行游戏等问题20余个,同时准确估算了线上玩家所产生的压力,为最终服务器的部署及稳定运行提供了性能保障与数据支撑。
解决须要多人参与、团战等场景的测试问题:
机器人程序能够用于须要大量用户参与的测试场景,进行自动化测试及验证该类场景是否能够在必定压力下稳定运行:如世界boss战,公会战、跨服擂台赛等。
主城移动测试:https://v.qq.com/x/page/l03860ij85k.html
世界boss测试:https://v.qq.com/x/page/l0386whm8qt.html
英雄战场多人对战测试:https://v.qq.com/x/page/t0386qjnmtj.html
“外网问题无小事”,所幸此次《龙之谷》手游上线过程当中没有出现常见的面对开服压力而服务器崩溃的事件,在此次的手游测试过程当中也能够感觉到游戏发行、渠道和CP对服务器承压状况愈来愈重视。
然而目前市场上尚未针对游戏的服务器性能检测工具,不管是开源仍是商业软件都不能很好的知足游戏的专项测试需求,与此同时受限于开发周期短以及人力的问题,中小型CP每每采起编写模拟机器人进行简单的压测,测试的覆盖面窄,没法保证并发请求,形成潜伏的问题遗漏到线上。
这次腾讯测试团队正是利用腾讯WeTest的服务器性能测试功能实现模拟机器人的协议配置,最终实现了《龙之谷》手游的平稳上线。
目前腾讯WeTest的服务器性能测试功能已经开放对外,经过基于真实业务场景和用户行为进行压力测试,帮助游戏开发者发现服务器端的性能瓶颈,进行针对性的性能调优,下降服务器采购和维护成本,提升用户留存和转化率。