游戏服务端性能测试实战总结

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

性能测试教程:

【2023性能测试完整版】这可能是B站讲得最好的软件测试课程(Jmeter 接口测试实战 Loadrunner Tomcat综合教程)软件测试面试、自动化测试。

引言

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

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

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

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

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

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

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

技术框架剖析

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

编译语言: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秒。现在,让我们一起揭开这些耗时长的面纱,找出问题的源头。

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

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

 

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

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

服务器的极限

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

探索大型玩法场景的极限

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

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

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

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

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

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

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

CPU高负荷:挑战的起因

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

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

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

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

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

探索的继续

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

 最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql面试题35:MySQL有关权限的表有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…

sqlalchemy 连接池

报错 sqlalchemy.exc.TimeoutError: QueuePool limit of size 100 overflow 10 reached, connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/3o7r) 查看数据库未活动超时时间 show variables like "interactive_timeout";一般…

CAN和CANFD通信介绍

CAN(Controller Area Network,控制器局域网)是一种串行通信技术,专门用于在汽车电子控制单元(ECU)之间实现可靠的数据交换。 CAN协议介绍 电子化 汽车近年来的发展呈现出以电子化为主的特点。电子化的主…

虚幻引擎:如何才能对音波(声音资产)进行逻辑设置和操作

案列:调整背景音乐大小 1.创建一个SoundCue 2.进入创建的SoundCue文件 3. 创建音效类和音效类混合 4.进入SoundCue选择需要的音效类 5.然后音效类混合选择相同的音效类 6.然后蓝图中通过节点进行控制音量大小

C#实现五子棋小游戏:简单、有趣的编程项目

目录 引言什么是五子棋游戏规则开发环境准备安装C#开发环境选择合适的集成开发环境(IDE)游戏设计与功能分析游戏界面设计实现棋盘的绘制与操作实现落子功能实现输赢判断说明引言 什么是五子棋 五子棋是一种源于中国的传统棋类游戏,常见于中国、日本、韩国等亚洲国家,是亚洲…

Maven创建父子工程详解

引言 在微服务盛行的当下,我们创建的工程基本都是父子工程,我们通过父工程来引入jar,定义统一的版本号等,这样我们在子工程中就可以直接引用后使用了,而不需要去重复的声明版本号等,这样会更方便对整个项目…

测试老鸟整理,Pytest自动化测试框架的一些关键点,一文贯通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Pytest自动化框架&…

机器学习、深度学习相关的项目集合【自行选择即可】

【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法,它是YOLO(You Only Look Once)系列模型的进化版本。YOLOv5是由Ultralytics开发的,基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…

Flink开发环境搭建与提交运行Flink应用程序

Flink开发环境搭建与提交运行Flink应用程序 Flink概述环境 Flink程序开发项目构建添加依赖安装Netcat实现经典的词频统计批处理示例流处理示例 Flink Web UI 命令行提交作业编写Flink程序打包上传Jar提交作业查看任务测试 Web UI提交作业提交作业测试 Flink 概述 Apache Flink…

MinIO的安装与使用

文章目录 1.MINIO是什么?2.MINIO安装3.启动脚本4.打开MINIO页面5.MC命令6.MINIO备份脚本 1.MINIO是什么? MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。 MinIO与…

alsa音频pcm设备之i2c调试

i2cdetect 列举 I2C bus i2cdetect -l ls /dev/i2c* 列出I2C bus i2c-7 上面连接的所有设备,并得到i2c设备地址 i2cdetect -y 7 发现i2c设备的位置显示为UU或表示设备地址的数值,UU表示设备在driver中被使用. I2cdump i2c设备大量register的值 i2cdump -y 7 0x40 I2cset设置…

ICPC 2019-2020 North-Western Russia Regional Contest

A (codeforces.com) 这题在移动不被挡板挡住以及不超过边界的情况下,每次走的越多那么次数就越少 只要两个每次都走b-a步(已经是不被挡板挡住走的最多了),就不用考虑被挡板挡住的情况,只用单独考虑了,如果…

微服务09-Sentinel的入门

文章目录 微服务中的雪崩现象解决办法:1. 超时处理2. 舱壁模式3. 熔断降级4.流量控制 Sentinel1.介绍2.使用操作3.限流规则4.实战:流量监控5.高级选项功能的使用1.关联模式2.链路模式3.总结 流控效果1.预热模式2.排队等待模式3.总结4.热点参数限流5.实战…

【业务功能篇 131】23种设计模式介绍

第一章 设计模式概述 1.1 代码质量好坏如何评价? 要想学习设计模式呢 我们就必须搞清楚设计模式到底在我们的编程过程中起到了怎样的作用,在编程世界中它处在一个什么样的位置,它到底是一种抽象的设计思想,还是一套具体的落地方案. 在学习设计模式之前呢 我们需要了解一下 代…

【数据结构C/C++】顺序与链式二叉树创建与前中后、层序遍历

文章目录 顺序存储结构二叉树链式存储结构二叉树刷题推荐408考研各数据结构C/C代码(Continually updating) 顺序存储结构二叉树 顺序存储结构的二叉树的特点在于,其使用数组存放二叉树中的每一个节点。 我们设定根节点的数组索引下标为n&…

MYSQL的日志管理

MySQL中有几种类型的日志记录,分别用于记录不同的操作和事件。以下是MySQL中常见的日志类型 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据…

linux后台运行java项目/ jar包:nohup 命令

1.提出问题 我们把一个 SpringBoot 工程导出为 jar 包,jar 包上传到阿里云 ECS 服务器上,使用 java -jar xxx-xxx.jar 命令启动这个 SpringBoot 程序。此时我们本地的 xshell 客户端必须一直开着,一旦 xshell 客户端关闭,java -j…

Jenkins对应java版本

官网地址:Java Support Policy 运行jenkins时,需要使用下列Java版本:

Jenkins安装多个jdk版本,并在项目中选择对应jdk版本

下载jdk版本:进入oracle官网下载官方jdk Java Downloads | Oracle 例:比如项目需要使用java8.341的版本,而jenkins用的是java11的版本,这里就需要下载多个jdk版本。进入下载网址,Java Archive Downloads - Java SE 8u…

MySQL数据库技术笔记(3)

概述 学习MySQL数据库技术其实只需要安装mysql服务器就可以使用了。只不过对于初学者来说直接操作dos窗口方式比较麻烦,命令不熟悉,导致经常写错。在真实的开发当中直接操作dos窗口效率比较慢,企业中也会经常使用一些mysql数据库支持的可视化…