[06] 优化C#服务器的思路和工具的使用
优化C#服务器的思路和工具的使用
优化服务器之前, 需要先对问题的规模做合理的预估, 然后对关键的数据做采样, 做对比, 看和自己的预估是否一致, 误差大在什么地方, 是预估的不对, 还是系统实现有问题.
策划对彩虹联萌服务器的要求是3000到5000人在线.
大概的估算
玩了玩游戏, 在前期任务的流程中, 客户端对服务器发生的有效请求数, 实际上是比较少的. 跑路, 点击NPC, 打怪等等, 每一个状态变化中间需要的时间实际上是比较长的. 所以一秒的请求数应该是在0.5~1.0qps左右.
战斗因为是无目标的ARPG, 一点砍瓜切菜的感觉, 输入大概在1.0~2.0qps, 输出就比较高了, 目测系数有5.0~10.0. 也就是一个请求, 可能对应5-10个返回回来. 而且很有可能会有多个广播包.
移动和普通的MMOG差别不是很大, 只是如果用键盘操作的话, 状态变化会非常频繁; 如果是手机的话, 应该在1.0qps左右, 应该就够了. 唯一需要处理的就是广播系数, 周围的玩家越多, 需要广播的包就越多. 彩虹联萌一个场景大概有40~50人. 目测系数有10.0左右.
还有DB IO, 也需要估算, 因为单次操作比较耗时. 战斗过程中大概率是不需要访问DB的, 移动也是, 只有普通的任务和养成系统对DB写依赖比较高; 然后玩家登陆过程中, 因为游戏内有大量的系统, 可能需要10次load操作. 所以按照以往的经验, 卡牌类型的游戏1.0~2.0qps, 那么这个ARPG游戏服务器可能就0.5~1.0qps的样子.
采集数据
最开始处理的MongoDB的读写数据采样. 按照我们的估算, load一个玩家需要10个DB操作, 一个玩家在线大概只需要0.5~1.0个DB操作. 但是我们用机器人去跑, 发现处理MongoDB读写的队列经常因为过大, 进而系统OOM.
所以, 对已经完成DB操作, 和正在队列中的DB操作进行统计分析, 需要统计的数据:
类型(简单标注一下自己是哪个系统的)
文件, 行数(进行准确的追踪)
C#有
CallerLineNumber,CallerFilePath, 可以方便在编译时期获取类似于C/C++的__FILE__,__LINE__.
下来采集的是客户端的输入, 和发送给客户端的返回.
还有一种采集, 就是内存快照, 可以通过dotMemory来搞, 直接用VS获取内存快照最后会发现看不清楚. dotMemory在这方面做得不错.
处理思路
我在计算机程序设计艺术第一卷这本书里面学到一个东西, 就是时间复杂度和系数. 我们在一般的数据结构或者算法书里面只会看到时间复杂度的大概分析, 不会告诉你准确的公式是什么样子的.
然而, 我们游戏里面需要处理的在线玩家数量所呈现出来的公式, 应该是一次函数: Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构,我采用以下三种维度来讲解 1. 代码层面. 2. 数 ... 前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ... Web服务器性能/压力测试工具http_load.webbench.ab.Siege使用教程 - VPS侦探 http://soft.vpser.net/test/http_load/http_loa ... Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论 一.http_load 程序 ... 前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ... 回头看看 Web服务器性能/压力测试工具http_load.webbench.ab.Siege.loadrunner 转自http://www.cnblogs.com/AloneSword/p/3207697.html 按照从大到小,从主要到次要的形式,分析 mysql 性能优化点,达到最终优化的效果. 利用 min ... 一.http_load 程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会 ... MySQL 慢怎么办 如果遇到 MySQL 慢的话,你的第一印象是什么,MySQL 数据库如果性能不行,你是如何处理的? 我咨询了一些同行, 得到了以下反馈: 第一反应是再试一次 第二个反应是优化一下 ... Vue CLI3 移动端适配 [px2rem 或 postcss-plugin-px2rem] 今天,我们使用Vue CLI3 做一个移动端适配 . 前言 首先确定你的项目是Vue CLI3版本以上的 ... 关于如何解决Mybatis 日期查询时后面带.0 MySQL数据库: 直接在MySQL查询语句中解决: SELECT T.ID, T.USERNAME, DATE_FORMAT(t.birthda ... powerMock和mockito powermock和mockito都是做mock的框架,powermock在mockito的基础上扩展而来,支持mockito的操作(也支持别的mock框架比如ea ... 成长路线 信息安全 前端安全 web安全 基础,书籍推荐 <网站入侵与脚本攻防修炼> 什么是web漏洞 什么是sql注入漏洞 什么是数据库 什么是文件上传漏洞 什么是跨站脚本攻击 < ... Unix I/O 打开文件 一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备.内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件.内核记录有关这个打开 ... 1.数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.因为数组的长度是固定的,因此在Go语言中很少直接使用数组. 数组的每个元素可以通过索引下标来访问,索引下标的范 ... 1.推送到本地仓库 idea直接install即可 2.推送到公司私库 2.1 使用配置公司仓库地址的setting文件 <?xml version="1.0" encodi ... Mac本软件安装之后打不开的解决办法 MacOS系统版本10.15.3 一,安装Axure RP 9 问题:安装之后打不开 提示“Axure RP 9已损坏,无法打开”或“打不开 Axure RP 9 ... 本文章为SPSSAU数据分析思维培养的第3期文章. 上文讲解如何选择正确的分析方法,除了有正确的分析方法外,还需要把分析方法进行灵活运用.拿到一份数据,应该如何进行分析,总共有几个步骤,第一步第二步应 ... 一. 这种方式比较复杂,因为office版本的原因,所以要加其它函数 Private Function parseScript(strJson As String) Dim objJson As Ob ...
[06] 优化C#服务器的思路和工具的使用的更多相关文章
随机推荐