当前位置: 首页 > news >正文

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

导语:近期经历了一系列的性能测试,涵盖了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过载的原因以及其背后的数据关系。通过切换战斗同步策略,我们正在逐步找到解决之道。技术世界充满了无限的挑战和机会,让我们继续前行,一同探索未知的领域。

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

 

相关文章:

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

导语:近期经历了一系列的性能测试,涵盖了Web服务器和游戏服务器的领域。在这篇文章中,我将会对游戏服务端所做的测试进行详细整理和记录。需要注意的是,本文着重于记录,而并非深入的编程讨论。在这里,我将与…...

塔望食观察 | 中国海参产业发展现状及挑战

海参,一个古老的物种,堪称海底活化石,据资料显示,海参在地球上存活超过6亿年,比恐龙还早。海参的药用、食疗和营养滋补价值极高,清朝学者赵学敏编的《本草纲目拾遗》有这样的叙述:“海参性温补&…...

springboot 捕获特点异常信息并处理

前端获取效果图 springboot 捕获特点异常信息并处理 import com.one.utils.JSONResult; //JSONResult定义处理结果对象 import org.springframework.web.bind.annotation.ExceptionHandler...

【Spring框架学习3】Spring Bean的作用域 及 生命周期

一、Spring Bean的作用域有哪些? Spring框架支持以下五种Bean的作用域: Singleton:这是默认的作用域,在每个Spring IoC容器中只有一个Bean的实例(IoC初始化后)。Spring 中的 bean 默认都是单例的,是对单例设计模式的…...

多线程并发篇---第四篇

系列文章目录 文章目录 系列文章目录一、Java中synchronized 和 ReentrantLock 有什么不同?二、有三个线程T1,T2,T3,如何保证顺序执行?三、SynchronizedMap和ConcurrentHashMap有什么区别?一、Java中synchronized 和 ReentrantLock 有什么不同? 相似点: 这两种同步方式有…...

vs code 添加vue3代码模板方法

最终效果 vs code 添加vue文件模板用于通过简写自动生成代码 操作步骤如下 1.找到vue模板代码编写入口 2.修改模板内容 2.1 vue.json内容 {// Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and// description. T…...

怎么通过Fiddler对APP进行抓包?以及高级应用场景分析

前言 我们经常需要用到Fiddler做代理服务器对Web、APP应用进行抓包,以便我们对接口功能进行测试调试,定位问题等。这篇将讲述怎么通过Fiddler对APP进行抓包,以及简单介绍一些高级应用场景。 首先,附上Fiddler使用的环境配置清单…...

centos下安装配置redis7

1、找个目录下载安装包 sudo wget https://download.redis.io/release/redis-7.0.0.tar.gz 2、将tar.gz包解压至指定目录下 sudo mkdir /home/redis sudo tar -zxvf redis-7.0.0.tar.gz -C /home/redis 3、安装gcc-c yum install gcc-c 4、切换到redis-7.0.0目录下 5、修改…...

【angular】TodoList小项目(已开源)

参考:https://segmentfault.com/a/1190000013519099 文章目录 准备工作headerTodo、Doing、Done样式(HTMLCSS)功能(TS)将输入框内容加入todoList(addTodo)将todo事件改到doing 服务 参考开源 效…...

【Java 进阶篇】HTML块级元素详解

HTML(Hypertext Markup Language)是用于创建网页的标记语言。在HTML中,元素被分为块级元素和内联元素两种主要类型。块级元素通常用于构建网页的结构,而内联元素则嵌套在块级元素内,用于添加文本和其他内容。本文将重点…...

CSS设置鼠标样式和添加视频样式

鼠标的样式 <div style"cursor: default">默认鼠标的样式</div><div style"cursor: pointer">小手样式</div><div style"cursor: move">移动样式</div><div style"cursor: text">文本样式&…...

项目文件上传到行云codeup teambition

接手公司好几年的老项目&#xff0c;在行云上已经有1.9G的大小所以被限制上传了 只有花钱扩容或者重新建库。 1.重新建库&#xff1a;登录你的行云账户在代码库中新建代码库&#xff08;网上有详细的&#xff09; 创建成功后的库中只有readme文件。 2.复制代码库的下载地址 …...

现货黄金和实物黄金有什么区别?

在黄金投资市场中&#xff0c;现货黄金和实物黄金都是两种比较受欢迎的黄金投资品种。想想越来越多人认识到黄金投资的重要性&#xff0c;那么要选择一个投资品种&#xff0c;应该选哪个黄金投资品种呢&#xff1f;下面我们就来讨论一下这两者有何区别&#xff0c;以及投资者应…...

/dev下没有video0这个文件(ubuntu无法打开摄像头)

文章目录 硬件问题一、查看虚拟机摄像头连接情况二、解决红色报错三、虚拟机硬件处理内容问题一、设备号二、视频格式问题硬件问题 一、查看虚拟机摄像头连接情况 报错详情 ERROR: cannot launch node of type [image_view/image_view]: image_view ROS path [0]=/opt/ros/m…...

mysql面试题32:MySQL数据库服务器性能分析的方法命令有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL数据库服务器性能分析的方法命令有哪些? MySQL数据库服务器性能分析的方法和命令有以下几种: EXPLAIN命令:用于分析查询语句的执行计划,…...

伦敦银最新价格能进吗?

不少新手的伦敦银投资者由于看不懂行情走势&#xff0c;在行情机会来临时总感觉患得患失&#xff0c;但由于又十分渴望在这个市场上实现收益&#xff0c;所以经常通过各种各样的方式方法和手段&#xff0c;希望行情走势什么时候会出现进场的机会。 可以肯定的是&#xff0c;伦敦…...

【计算机毕设案例推荐】洋州影院购票管理系统SpringBoot+Vue

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 项目名 基于SpringBoot的洋州影院购票管理系统 技术栈 SpringBootVueMySQLMaven 文章目录 一、洋州…...

Java设计模式之模板方法模式

模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法骨架&#xff0c;将一些步骤的具体实现延迟到子类中。模板方法模式通过将共同的代码逻辑放在父类中&#xff0c;而将具体的实现细节留给子类来实现&#xff0c;从…...

MinIO的安装与使用

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

“==”和equals的区别

总结几句话&#xff1a; 双等号始终是 1.基本数据类型&#xff1a;比较存储的值是否相等。 2.引用数据类型&#xff1a;比较所指对象的地址值是否相等。 equals 1.没有被重写过&#xff1a; 相当于&#xff1b;但是不能比较基本数据类型&#xff0c;比较的是引用对象的所指…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...