游戏服务端性能测试

news2024/11/17 23:55:15

导语:近期经历了一系列的性能测试,涵盖了Web服务器和游戏服务器的领域。在这篇文章中,我将会对游戏服务端所做的测试进行详细整理和记录。需要注意的是,本文着重于记录,而并非深入的编程讨论。在这里,我将与您分享这段时光的见闻,希望能够为您呈现一个全面而有趣的视角,谢谢您的关注。

引言

为什么要做游戏服务器的性能测试?想想平时有没碰到哪些宕机卡顿场景。说不定就是服务器引起的。

  1. 用户体验保障: 游戏服务器性能直接影响玩家的体验。如果服务器性能不足,游戏可能会出现延迟、卡顿、掉线等问题,影响玩家的乐趣,甚至可能导致玩家流失。

  2. 稳定性验证: 在高并发情况下,游戏服务器可能会面临各种挑战,如峰值负载、请求堆积等。性能测试可以验证服务器在不同负载情况下的稳定性和可靠性,帮助开发人员发现潜在的问题并加以解决。

  3. 服务器容量规划: 通过性能测试,开发团队可以了解服务器在不同负载下的性能表现,从而做出合理的容量规划。这有助于避免服务器过剩或不足的情况,提高资源利用效率。

  4. 性能优化: 通过性能测试,可以识别服务器性能瓶颈和瓶颈原因。开发人员可以根据测试结果进行针对性的优化,提升服务器的性能和响应速度。

  5. 应对突发情况: 在游戏发布或活动期间,服务器可能会面临突发的用户激增,如推出新内容、举办活动等。性能测试可以模拟这种情况,帮助开发团队准备应对措施,保证服务器在压力下仍能正常运行。

  6. 节省成本: 通过性能测试,可以有效地发现并解决问题,减少后期维护成本。同时,避免了因服务器性能问题引起的用户流失,有助于提高游戏的盈利能力。

技术框架剖析

主要是下面这些,还有进程,线程这些,就不一一列出

编译语言:Python 3.10.9

Python一直以其简洁和强大而闻名,版本3.10.9带来了一系列令人兴奋的特性。我们将在这个框架中体验到这些特性的魅力,从而更高效地实现我们的目标。

强大的库支持

  • Ray: 这个库为我们提供了分布式执行的能力,让我们的任务可以在多个进程和线程中并行执行,从而极大地提高了效率。

  • Pykka: 作为一个轻量级的Python库,Pykka为我们提供了优雅的多线程编程方式,使得线程间的通信和协调变得更加简单。

  • Flask: 作为一个微型的Web框架,Flask不仅简化了我们构建Web应用的过程,还为我们提供了扩展性强的组件。

  • Sproto: 这个库让我们能够更加便捷地进行数据的序列化和反序列化,从而在通信过程中更加高效地传递数据。

  • Redis: 作为一个高性能的缓存数据库,Redis将为我们的应用提供快速的数据访问能力,从而提升整体性能。

施压环境:Ubuntu Docker 容器

在技术的道路上,一个稳定且可控的环境是不可或缺的。我们将在Ubuntu Docker容器中搭建我们的实验环境,这将确保我们的测试和分析更加准确可靠。

新手测试场景模拟:探寻导量的奥秘

模拟导量负载,以云服务器为舞台

云服务器A上承载了众多游戏服,而云服务器B则承载多个中心服和跨服。这里,我们会模拟不同负载情况,为了更好地探索,将以批次的形式进入N个游戏服,紧随其后是新手测试,我们将一直持续到特定任务ID的终结。

注册、创角、登录,一气呵成

我们的目标是验证注册、创角和登录的表现,按需求,在1分钟内承受2000的导量,这是我们的挑战。令人欣慰的是,注册、创角和登录的数据显示没有问题,成功率竟然高达100%!
创角

登录耗时:探寻根源

我们深入挖掘了玩家的登录耗时数据,发现存在一些问题,最长的耗时竟然达到了35秒。现在,让我们一起揭开这些耗时长的面纱,找出问题的源头。
登录耗时

统计协议响应时间:优化的关键

为了针对性地优化,我开始统计各种协议的响应时间。通过这些数据,我们可以找到那些耗时较长的环节,并将其交给开发团队进行深入优化。
cost1
cost2

定位问题:再次登录的观察

我们对已经创角的玩家再次登录进行了观察,发现黄色和红色角色都是已创角的。这提示我们可能存在创建角色耗时长的问题。在进一步的调查中,我们发现问题出在了数据写入数据库上,导致了耗时问题。
在这里插入图片描述

服务器的极限

我持续测试了半小时,观察了游戏服的CPU和内存表现。不同公司标准不同,而对于我司,单核CPU达到100%、内存使用3G,是服务器的承载上限。
CPU内存

探索大型玩法场景的极限

这次,我们将进入一个充满挑战的领域,探索大型玩法场景的负载极限。

打Boss、互相PK,还有积分!

在这个玩法中,一群玩家将齐聚于同一场景,迎接着Boss的挑战,彼此间展开激烈的战斗,不仅能够互相击杀,还有机会获得积分。直至时间结束,他们会走出场景,留下属于战斗的记忆。这次,我们要测试的是在这样的场景中,服务器和客户端的性能表现。

探索极限:玩家人数的挑战

我们的目标是找到这个场景能够支持的最大玩家人数,让他们在同一场景中展开战斗。接下来,我们将分析性能数据,从中得出场景的负载极限。这将为我们后续的优化和规划提供宝贵的信息。得出一个场景极限后,超出的则分流到多个场景。

极限挑战:从百分之百到百分之二百

这次的标准与之前的新手测试有所不同。在新手测试中,我们的服务器已经达到了百分之百的极限。而在这次的跨服测试中,我们的极限提高到了百分之二百。然而,这个标准的确立并不仅仅取决于服务器资源的分配,还与服务器整体架构紧密相连。寻找服务器和玩家数量之间的平衡点。
CPU

CPU高负荷:挑战的起因

我们注意到上图CPU的异常高负荷与同场景战斗的人数和频繁的战斗逻辑运算有着密切关系。在庞大的人数和频繁的战斗计算下,CPU不堪重负,面临过载的问题。

协议数据量的统计:探寻数据症结

我们进一步研究了协议数据量,令人惊讶的是,单个机器人仅在1分钟内就接收了4万条数据。这些海量的数据传输不仅增加了网络负担,也加重了服务器的压力,进一步加剧了CPU的过载情况。
proto

挑战与解决:百人战斗的同步

百人同场景战斗所带来的全地图实时同步,确实让服务器承受难以想象的压力。为了解决这个问题,我们采取了局部广播-九宫格的策略。这种方式有效地减轻了服务器的负担,让战斗同步变得更加可控。

探索的继续

在这次的技术探索中,我们深入了解了CPU过载的原因以及其背后的数据关系。通过切换战斗同步策略,我们正在逐步找到解决之道。技术世界充满了无限的挑战和机会,让我们继续前行,一同探索未知的领域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio 2022 你必须知道的实用调试技巧

目录 1、什么是bug? 2.调试是什么?有多重要? 2.1我们是如何写代码的? 2.2又是如何排查出现的问题的呢? ​编辑 2.3 调试是什么? 2.4调试的基本步骤 2.5Debug和Release的介绍 3.Windows环境调试介绍…

spark第四课

countByValue 数据源中相同的值有多少个,也就是WordCount countByKey 表的是键值对中的key出现了几次,与Value的值无关 不推荐collect,因为他是将数据放入内存,但是内存不够大的话,就容易崩,所以使用saveAsTextFile更好,直接放入磁盘. 保存成对象文件,需要序列化 启动了2个 J…

前端PWA应用的相关知识和基础Demo

一、什么是PWA应用? 1、PWA简介 ​ 渐进式Web应用(Progressive Web App),简称PWA,是 Google 在 2015 年提出的一种使用web平台技术构建的应用程序,官方认为其核心在于Reliable(可靠的&#xf…

修改窗口类的属性将影响所有该类的窗口

正如标题所指出的:窗口类的属性将影响所有由该窗口类创建的窗口。这就是它为什么称之为窗口类的原因。 我用这么多话来强调这一点,似乎是一件显而易见的事情,但我看到许多”解决方案”忽视了这个简单的事实。 在 WNDCLASS(或 WND…

Autoware.universe与Carla(二进制版)联调

文章目录 一、Carla的使用1.1 二进制Carla的安装1.2 Carla API的使用1.2.1 增加行人流和车流1.2.3 改变服务器的时间,光照,天气1.2.3 手动控制车辆1.1.4 车辆的自动驾驶 二、Universe与Carla联调2.1 设置OpenPlanner2.2 重新编译并运行 本文介绍了 Autow…

Nginx反向代理配置流式响应

Nginx 是通过缓存响应内容来处理请求的。也就是说,当 Nginx 接收到完整的响应后,才会将其发送给客户端,所以默认不支持流式响应,这里讲讲 Nginx 反向代理中怎么配置流式响应? 一、使用背景 最近使用 Egg.js 搭建自动化…

冠达管理:非银金融是什么?

非银金融(Non-banking Financial Institutions,简称非银)是指除了传统的银行以外的其他金融机构。与银行不同的是,非银金融机构没有颁发钱银的权利,但在金融市场中发挥着重要的效果。在全球范围内,非银金融…

每日刷题(翻转+二分+BFS)

食用指南:本文为作者刷题中认为有必要记录的题目 ♈️今日夜电波:凄美地—郭顶 1:10 ━━━━━━️💟──────── 4:10 🔄 ◀️ ⏸ ▶️ ☰…

Android 标准语音识别框架:SpeechRecognizer 的封装和调用

前言 此前,笔者梳理了语音相关的两篇文章: 如何打造车载语音交互:Google Voice Interaction 给你答案:介绍的是 3rd Party App 如何通过 Voice Interaction API 快速调用系统的语音交互服务快速完成确认、选择的基础语音对话直面…

创建 github 项目,并自动化配置

一 新建项目 github 创建新项目,并自动化部署 二 github 到本地 三 自动化部署

苹果iOS17引入新功能:实时显示充电设施信息,续航焦虑不再

据外媒9to5mac报道,苹果公司计划在iOS 17中引入一项非常方便电动汽车车主的功能,即iPhone内置的地图应用将实时显示充电设施的可用性信息。在最新发布的iOS 17 Beta 1版本中,这一功能仍在开发阶段,尚缺少一些必要的数据。 据称&am…

【健康医疗】Axure用药提醒小程序原型图,健康管理用药助手原型模板

作品概况 页面数量:共 10 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:健康管理领域,用药助手 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 本作品为「用药提醒」小程序原…

基于Java+SpringBoot+Vue的养老服务管理系统【源码+论文+演示视频+包运行成功】

博主介绍:✌csdn特邀作者、博客专家、java领域优质创作者、博客之星,擅长Java、微信小程序、Python、Android等技术,专注于Java技术领域和毕业项目实战战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏…

Linux面试笔试题(3)

54、统计磁盘空间或文件系统使用情况的命令是:(  A  ) A. df        B. dd   C. du        D. fdisk 在Linux系统中,df命令用于统计磁盘空间或文件系统使用情况。例如,要查看当前目录及其子目录下所有文件和文件夹…

linux 安装 kibana

首先下载 kibana https://www.elastic.co/cn/downloads/kibana 然后上传到linux /usr/local 目录下解压安装 修改config/kibana.yml 配置文件,将elasticsearch.hosts

攻防世界-supersqli

原题 解题思路 直接查找看不到明显的回显变化 先找回显变化数量 -1 order by 2 #如果是3列就报错,说明只有两列。接下来找数据库名称: -1 union select 1,databases # 结果是后端做了一些简单的过滤,需要更换查找语句。 -1; show …

python打包的exe文件运行时出现DLL load failed找不到DLL

一、问题&#xff0c;python开发的py代码文件通过"pyinstaller -c -F .\test.py"命令打包后在windows控制台(cmd.exe)运行报如下错误 D:\python\test>test.exe Traceback (most recent call last):File "test.py", line 7, in <module>File &qu…

轮胎侧偏刚度拟合估计

参考博客&#xff1a; carsim如何获得轮胎侧偏刚度_SSW.hani的博客-CSDN博客

面试算法变成题-必须掌握

一 多线程 1.1 死锁 1.1.1 死锁的案例 package com.ljf.day0814;/*** ClassName: DeadLock* Description: TODO* Author: admin* Date: 2023/08/21 09:31:16 * Version: V1.0**/ public class DeadLock {public static void main(String[] args) {Object objAnew Object(…

Delphi 安卓App自动升级

Androidapi.JNI.Support引用这个单元 procedure _InstallApk(Apk: string); varLFile: JFile;LIntent: JIntent; beginLFile : TJFile.JavaClass.init(StringToJString(ExtractFilePath(Apk)), StringToJstring(ExtractFileName(Apk)));LIntent : TJIntent.Create;LIntent.set…