创研科技做网站怎么样/app推广地推接单网
导语:近期经历了一系列的性能测试,涵盖了Web服务器和游戏服务器的领域。在这篇文章中,我将会对游戏服务端所做的测试进行详细整理和记录。需要注意的是,本文着重于记录,而并非深入的编程讨论。在这里,我将与您分享这段时光的见闻,希望能够为您呈现一个全面而有趣的视角,谢谢您的关注。
引言
为什么要做游戏服务器的性能测试?想想平时有没碰到哪些宕机卡顿场景。说不定就是服务器引起的。
-
用户体验保障: 游戏服务器性能直接影响玩家的体验。如果服务器性能不足,游戏可能会出现延迟、卡顿、掉线等问题,影响玩家的乐趣,甚至可能导致玩家流失。
-
稳定性验证: 在高并发情况下,游戏服务器可能会面临各种挑战,如峰值负载、请求堆积等。性能测试可以验证服务器在不同负载情况下的稳定性和可靠性,帮助开发人员发现潜在的问题并加以解决。
-
服务器容量规划: 通过性能测试,开发团队可以了解服务器在不同负载下的性能表现,从而做出合理的容量规划。这有助于避免服务器过剩或不足的情况,提高资源利用效率。
-
性能优化: 通过性能测试,可以识别服务器性能瓶颈和瓶颈原因。开发人员可以根据测试结果进行针对性的优化,提升服务器的性能和响应速度。
-
应对突发情况: 在游戏发布或活动期间,服务器可能会面临突发的用户激增,如推出新内容、举办活动等。性能测试可以模拟这种情况,帮助开发团队准备应对措施,保证服务器在压力下仍能正常运行。
-
节省成本: 通过性能测试,可以有效地发现并解决问题,减少后期维护成本。同时,避免了因服务器性能问题引起的用户流失,有助于提高游戏的盈利能力。
技术框架剖析
主要是下面这些,还有进程,线程这些,就不一一列出
编译语言: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服务器和游戏服务器的领域。在这篇文章中,我将会对游戏服务端所做的测试进行详细整理和记录。需要注意的是,本文着重于记录,而并非深入的编程讨论。在这里,我将与…...

【使用Zookeeper当作注册中心】自己定制负载均衡常见策略
自己定制负载均衡常见策略 一、前言随机(Random)策略的实现轮询(Round Robin)策略的实现哈希(Hash)策略 一、前言 大伙肯定知道,在分布式开发中,目前使用较多的注册中心有以下几个&…...

设计模式十七:迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种访问聚合对象(例如列表、集合、数组等)中各个元素的方法,而无需暴露其内部表示。迭代器模式将遍历元素和访问元素的责任分离开来࿰…...

Python制作爱心并打包成手机端可执行文件
前言 本文是想要将python代码打包成在手机上能执行的文件 尝试了几个库, 有这也那样的限制,最终还是选了BeeWare 环境:python3.7.x 开始 找到打包有相关工具os-android-apk-builder,buildozer,cx_Freezeÿ…...

使用docker-compose.yml快速搭建开发、部署环境(nginx、tomcat、mysql、jar包、各种程序)以及多容器通信和统一配置
目录 docker-compose语法(更多说明可查看下面代码)imagehostnamecontainer_namevolumesnetworks yml文件的使用启动停止 开发环境(这里以python为例)部署环境nginxmysqltomcatjar包打包后的可执行程序 常见问题与解决方案多个容器…...

管理类联考——逻辑——真题篇——按知识分类——汇总篇——二、论证逻辑——支持加强——第三节——分类3——类比题干支持
文章目录 第三节 支持加强-分类3-类比题干支持真题(2017-28)-支持加强-正面支持-表达“确实如此”真题(2017-36)-支持加强-正面支持-表达“确实如此”真题(2017-39)-支持加强-正面支持-方法有效或方法可行,但多半不选择方法无恶果真题(2017-50)-支持加强真题(2018-2…...

搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nums[1], …, …...

Steam搬砖项目:最长久稳定的副业!
项目应该大家都有听说话,但是细节问题,如何操作可能有些不是很清楚,今天在这里简单分享一下。 这个Steam搬砖项目主要赚钱汇率差和价值差,是一个细分领取的小项目。 不用引流,时间也是比较自由的,你可以兼…...

最小化安装移动云大云操作系统--BCLinux-R8-U8-Server-x86_64-230802版
CentOS 结束技术支持,转为RHEL的前置stream版本后,国内开源Linux服务器OS生态转向了开源龙蜥和开源欧拉两大开源社区,对应衍生出了一系列商用Linux服务器系统。BC-Linux V8.8是中国移动基于龙蜥社区Anolis OS 8.8版本深度定制的企业级X86服务…...

神经网络基础-神经网络补充概念-05-导数
概念 导数是微积分中的一个概念,用于描述函数在某一点的变化率。在数学中,函数的导数表示函数值随着自变量的微小变化而产生的变化量,即斜率或变化率。 假设有一个函数 f(x),其中 x 是自变量,y f(x) 是因变量。函数…...

kubernetes — 安装Ingress
1、 Ingress 1、安装-Nginx-Ingress kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml 2、设为默认的Ingress [rootk8s01 ~]# vim default_ingress.yaml apiVersion: networking.…...

SSR使用HTTPS
1.安装 npm i browser-sync 2. 再angular.json里配置 "serve-ssr": {"builder": "nguniversal/builders:ssr-dev-server","options": {"ssl": true,"sslCert": "./node_modules/browser-sync/certs/server…...

Spring Boot中使用validator如何实现接口入参自动检验
文章目录 一、背景二、使用三、举例 一、背景 在项目开发过程中,经常会对一些字段进行校验,比如字段的非空校验、字段的长度校验等,如果在每个需要的地方写一堆if else 会让你的代码变的冗余笨重且相对不好维护,如何更加规范和优…...

thinkphp 5 实现UNION ALL 3个联表查询,并且带上搜索条件,名称,时间,手机号
在ThinkPHP 5中实现带有搜索条件、名称、时间和手机号的3个联表查询(UNION ALL),您可以按照以下步骤进行操作: 确保已经配置好数据库连接信息和相关的模型。 使用union()方法来构建3个联表查询,同时在每个查询中添加所…...

React 之 Router - 路由详解
一、Router的基本使用 1. 安装react-router react-router会包含一些react-native的内容,web开发并不需要 npm install react-router-dom 2. 设置使用模式 BrowserRouter或HashRouter Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件Bro…...

框架分析(1)-IT人必须会
框架分析(1)-IT人必须会 专栏介绍当今主流框架前端框架后端框架移动应用框架数据库框架测试框架 Angular关键特点和功能:组件化架构双向数据绑定依赖注入路由功能强大的模板语法测试友好 优缺点分析优点缺点 总结 专栏介绍 link 主要对目前市…...

前端面试的游览器部分(7)每天10个小知识点
目录 系列文章目录前端面试的游览器部分(1)每天10个小知识点前端面试的游览器部分(2)每天10个小知识点前端面试的游览器部分(3)每天10个小知识点前端面试的游览器部分(4)每天10个小知…...

认识Junit
1. 前言 2. Junit注解 2.1. 常用的注解 2.1.1. Test 表示当前方法是一个测试方法(不需要main来执行) Test void Test01() throws InterruptedException {System.out.println("测试用例1");WebDriver webDriver new ChromeDriver();webDriver.get("https:/…...

Unity C# 引用池 ReferencePool
Unity C# 引用池 ReferencePool 1.目的 对于多次创建的数据使用new 关键字是十分消耗性能的,使用完成后由GC去自动释放,当一个类型的数据频繁创建可以使用引用池进行管理。 2.实现 项目目录 IReference 接口 要放入引用池的数据只需要继承这个接口…...

opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale()
人脸识别是指程序对输入的人脸图像进行判断,并识别出其对应的人的过程。人脸识别程 序像我们人类一样,“看到”一张人脸后就能够分辨出这个人是家人、朋友还是明星。 当然,要实现人脸识别,首先要判断当前图像内是否出现了人脸&…...

〔013〕Stable Diffusion 之 图片自动评分和不健康内容过滤器 篇
✨ 目录 🎈 下载咖啡美学评价插件🎈 咖啡美学评价使用🎈 不健康内容过滤器插件🎈 下载咖啡美学评价插件 想让系统帮你的图片作品打分评价,可以下载咖啡美学自动评价插件插件地址:https://github.com/p1atdev/stable-diffusion-webui-cafe-aesthetic也可以通过扩展列表…...

6.RocketMQ之消费索引文件ConsumeQueue
功能:作为CommitLog文件的索引文件。 本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface…...

Appium-移动端自动测试框架,如何入门?
Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门,那么我们就直奔主题。文章结构如下: 1、为什么要使用Appium? 2、如何搭建Appium工具环境?(超详细) 3、通过demo演示Appium的使用 4、Appium如何…...

复数混频器、零中频架构和高级算法开发
文章里讲解了关于射频IQ调制器、零中频架构相关的原理及技术,全都是干货!其实好多同行对软件无线电的原理、IQ调制、镜像抑制都是一知半解,知其然不知其所以然。好好研读这篇文章,相信会让你有种恍然大悟的感觉。 RF工程常被视为…...

Web 拦截器-interceptor
拦截器是一种动态拦截方法调用的机制,类似于过滤器,是Spring框架提出的,用来动态拦截控制器方法的执行。 其作用是拦截请求,在指定方法调用前后,根据业务执行预设代码。 实现步骤 1.定义拦截器,实现Handl…...

Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化
目录 引出类什么时候被加载JVM中创建对象几种方式1.new 看到new : new Book()2.反射 Class.forName(“包名.类名”)如何获取Class对象【反射的基础】案例:连接数据库方法 3.克隆(拷贝)clone浅拷贝深拷贝案例 序列化和反序列化对象流-把对象存…...

扩散模型实战(四):从零构建扩散模型
推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 本文以MNIST数据集为例,从…...

YOLOv5、YOLOv8改进:S2注意力机制
目录 1.简介 2.YOLOv5改进 2.1增加以下S2-MLPv2.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 S2-MLPv2注意力机制 最近,出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比,基于 MLP 的视觉架构具有较少的归纳偏差,在图像识…...

LeetCode 542. 01 Matrix【多源BFS】中等
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

使用open cv进行角度测量
使用open cv进行角度测量 用了一点初中数学的知识,准确度,跟鼠标点的准不准有关系,话不多说直接上代码 import cv2 import mathpath "test.jpg" img cv2.imread(path) pointsList []def mousePoint(event, x, y, flags, param…...