性能问题与服务端性能测试

ChunL

2022-11-152376次浏览

3评论

37收藏

13点赞

分享

一、移动游戏性能

游戏有什么性能问题?

通常我们会遇到一个问题就是卡:卡顿、不流畅。这是对玩家体验最核心的影响。

第二个问题是挂:挂起、宕机等性能问题。

软件性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。在性能方面我们主要考虑这两个方面,会不会卡顿,服务器会不会挂。

1. 移动游戏的性能测试是什么?

首先我讲一下性能测试的三要素。

第一个是被测对象:客户端和服务端;

第二个要素是测试工具和平台。 

第三个是性能指标。

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

以吃火锅为例,服务端和客户端的性能类似于餐厅的服务能力,例如负载的客人流量类似于服务端的负载能力等,客户端就类似于这个餐桌,火锅有多大,也就是内存有多少。几双筷子,也就是客户端的CPU多少。在手机性能上,我们关注四个点,内存、CPU,IO能力,网络。 

二、服务端性能测试

一般讲到游戏的服务端问题,大家会想到大型多人在线的服务器自爆。

1. 服务端到底在做什么事情呢?客户端和服务端之间发生了什么?

我举个例子,ABC三个玩家各拿一台手机(客户端),A玩家释放了一个技能,这个技能会先反馈到服务端,判断能否释放这个技能。服务端返回可以,A客户端即可释放技能,同时返回消耗的能量和伤害数据返回到服务端,服务端判定正确,同时服务端反馈给被攻击的B玩家扣血,和观战的C玩家。这时候数据库会扣掉相应的数值。 

在释放技能的过程中,服务端会做一个交互,同时服务端也同步数据给各个客户端。

目前服务端的架构非常大,游戏里面有几个定义:

  • 逻辑服:是指一台机器上开两个服,两个服的玩家互不干扰。当然可以做一个逻辑集群,一台硬件机器上由两三个逻辑服。好处是其中一台硬件机器挂了,其他不会受到干扰。

  • 物理服:指几台机器构成一个服务器。

  • 集群:整一个机房就是集群,这个集群可以开很多的逻辑服和物理服。

2. 如何做服务器性能测试?难度在哪里?

服务器的性能指标有CPU、内存、磁盘和网络。 

我们在做服务器性能测试时,需要很多玩家参与满足服务器的性能上限,这里引入一个概念,设计机器人模拟玩家的数据。

机器人有三种进化状态:

  • 状态机:执行简单流程;

  • 行为树 :半智能地执行复杂流程;

  • 人工智能:通过模拟游戏里的情况产生行为反馈。

3.服务端性能测试手段:

压测:压力测试,机器人集群模拟真实运行环境,测试会不会导致服务器挂和客户端卡。

如何做性能压测呢?

游戏研发会有很多阶段,DEMO,研发中早期,渠道测试,正式上线,运营期。

压力测试一般在渠道测试阶段进行,因为这个阶段玩家有一定规模,核心玩法成熟,运行时间较短。之后是正式上线阶段,这个阶段有大规模的玩家,玩法和周边系统成熟,并有更高的稳定性要求。在运营期也需要进行压测,玩法迭代引入压力,基础设施更改,新服验收。

压力点一般分三种:空间聚集、全服操作、数据库。

  • 空间聚集:玩法设计导致的时间或者空间的大量玩家聚集,如活动开始时,全服玩家进行同一传送操作造成的服务器性能问题。

  • 全服操作:同一时刻服务器对所有或者大量玩家进行某种操作,可能造成的性能问题。例如,玩家世界频道聊天需要全服广播导致服务器各个进程负载过高,服务器网络带宽占用太大导致客户端操作延迟明显,客户端处理大量聊天信息导致客户端卡顿明显。

  • 数据库读取:由于数据库使用不当(如没有建立索引)、并发度不够导致的数据库性能瓶颈。玩家频繁登录,数据库读取出现性能问题,数据库负载过高,响应时间过长等。

4.如何构建一个合适的压测机器人呢?

机器人有三个结构:

  • 第一层是机器人框架,包括机器人启动和停止、管理加密的操作;

  • 第二个是通信协议,通信协议指的是模拟服务端和客户端的协议,登陆匹配的验证手段等;

  • 第三个是测试用例的组织,通过机器人去满足各种测试需求。

目前市面上有两种机器人构造方式,把本来已有的客户端进行改造,从客户端脚本出发构造机器人,构建一个单进程机器人。这种方式很方便,但是执行效率低。另一种是从头构建机器人脚本,同步属性,构建网络通信等,这种方式麻烦,但是执行效率高。 

5.压测结果分析

最后对压测结果进行分析,服务器各个进程之间的通信延迟,如果延迟越低,真实客户端服务端的延迟越低。 

除此之外还有DB数据分析。 

最终压测结果我们会看综合型数据的分析,对每秒登录数、玩法承载人数、单机承载人数、总承载人数等,进行分析。

6. 最后讲一个简单的服务端性能优化的思路

首先是协议精简,客户端传给服务端太多信息,服务端需要去处理很多事务,会造成服务端突然挂了。做到精简协议的话,是可以优化服务端的性能。

另一个是减小压力,避免玩法聚集,避免单点压力。

除此之外还有优化引擎,算法效率、负载均衡、弹性动态扩容等方法。

评论 (3)

0/1000
网易游学APP
为热爱赋能
扫描二维码下载APP