游戏服务器优化总结

优化可能牵一发而动全身,尽快利用各种手段解决问题,保证项目运行

逻辑帧处理优化。因为玩家的交互我们必须要控制在一定时间内,比如100ms。找到最耗时的函数,内嵌检测,运行超时LOG。大量道具,NPC等 位置计算,伤害计算等数学计算过多,不可控的玩家行为,跨线程访问,不合理的线程粒度 。可以给对象设置激活状态,没有激活的对象不跑逻辑。大量的对象就要分批计算、如果一个逻辑帧跑不完所有的对象,就会分段来计算。逻辑帧里面把N个消息包合成一个发送,降低数据包的量级。

锁操作优化。锁操作力度尽量小一些,因为锁的力度大了以后很多资源要等待。死锁现在已经很少发生了,因为锁规划合理以后其实没有大家想象的那么恐怖。假设有一个消息链条,一秒10万个数据往外发,分成逻辑帧,一个逻辑帧里面可能有几千个,几千个不可能锁住之后把它发出去,然后一个交换队列发出,就是尽量减少操作中的一些时间。

数据结构优化。就是说要把里面的成员变量压缩的尽量小,因为游戏玩家上线的时候要求效率非常高,3-5秒之内就要进入场景里面去,所以说它的存档要尽量小。假设一个玩家存档优化完了之后是500K,因为现在网卡都是千兆的,设计阶段我们就可以通过计算知道每秒存档数量大概2K左右。所以这个时候在数据结构上的优化会特别多。

网络包优化。逻辑帧里面提到过把N个消息包合成一个发送,降低数据包的量级是一种方法。大量的网络IO重点优化包,找到发送最多的包,流量统计,LOG记录。然后逻辑上进行优化。例如AOI系统中,我走了一步因为椅子挡住了,所以只有前面的兄弟看到我走了,所以这就是一个控制的范围,这个包的数量就是一个级数级的减少。还有一个是使用内存池,这个好像很正常,因为网络消息太频繁了,每秒大概十几万包往外发的时候,一天下来就几十个亿,所以必须要用内存池。

网络链接优化。 创建链接开销大,使用网络连接池解决 。开服玩家大量涌入,从设计上支持动态增加网关服务器解决 撞库等异常的网络攻击,及时彻底释放,封IP解决,网络消息包频率检测,恶意登录验证码校验等。

线程的优化。尽量减少锁的时间 尽可能的少调用锁 减小锁粒度 线程数控制,线程间切换开销 利用析构自解锁,防止死锁 游戏服务器的线程处理 网络 数据库 存读档 内部LOG 系统 游戏场景。有几个地方会用多线程:一是网络,一次交换收到的消息到处理线程;二是数据库,游戏里面写比读要频繁,所以分成读写锁,而且不能在关键节点存档;三是内部log系统,一次交换到写线程批次写入;四是游戏场景,不同的游戏有不同的操作,有的是多进程有的是多线程,不频繁操作,注意锁定时间。这里面有一个小的技巧,就是线程数要控制,因为CPU的轮片,要保存在当前场景然后再切换调度,时间都消耗在那里了,所以线程数目控制在你认为合理的范围内就可以了。

存档数据库优化。尽量保证不回档 设计存读档缓冲,减少直接对数据操作 增加存档频率,设定重要存档节点 控制存档数据大小。这个点的优化大概有几个点:一是缓存存档,我们专门做了一个缓存服务器出来,缓存存档还做了一个队列,队列里面会对存档次数包括它的一些算法保证优先级高的放在存档队列的最前端,让它优先存档,比如定时存档、升级存档是有一些优先级的;二是关键点存档,就是某些动钱的地方,关键的道具升级存档;三是压缩数据,因人而异,因为压缩和解压缩是有效率损失的。存档优化的一个目的就是保证不回档,好多时候有些外部因素是不可避免的,比如机房服务器断电;还有按战区分档数据库,类似于分布式存储,存不了就只能分库分表,这里主要讲的是思想。

内存优化。单个对象的内存占用尽量少,比如使用标记位 频繁申请释放的对象使用对象池,碎内存控制。重载new delete,每一次内存分配都会记录下来,哪个地方每天分配了多少次,消耗了多少内存,是不是有内存泄漏等。

log系统的优化。计算极限,各个相关设计写入读取频率和数量 大量LOG写入,分批次持续写入 LOG系统分级,控制写入阀值 ,统计系统同步,时间点选择。很多线上问题log系统是分析问题的基础,运营log可以写在mysql数据库里的,通过运营分析系统分析出来。运维log写到本地让运维系统去拿。不管哪种,都要在出问题时,第一时间定位出来为什么出问题了。

调用第三方API优化。考虑全面尽量少受影响 除非必要,否则不必须全信任并等待 开辟专门的线程或者服务等用于第三方API调用,并设置时间长度 第三方调用、超时、失败要统计 保证自身系统受第三方影响降到最低。

和业务上配合的优化。活动修改,错峰进行。咱们的开发或者说咱们的架构是和业务相互促进的,好多时候其实它就到了一个极限值了,每一个计算机绝对有一个极限值,要突破这个极限值,好多时候就是一个业务上的调整了。比如游戏里面有一个叫做虚假繁荣点的设定,就是做假的,让玩家觉得人多,这属于一个不算是投机取巧,只能说是一个核心业务上配合的优化,不可能说计算机系统就一直把它优化到最牛,当然这不是跟产品的兄弟扯皮,能做的咱们尽量做,当达到一个极限的时候,或者有更好解决方案的时候,和业务上的优化是可以想一想的。活动修改,错峰进行,在游戏中有很多活动,包括网站上也有很多活动,比如打折、优惠券,比如我抢个7,抢7的时候如果这个活动跟你同时进行,再发个2000块钱的优惠券,这个时候网站就把数据飙起来了,当然这你可能错一下,从业务上就把这个东西解决了。

灵活可控的开关系统和配置文件。随时指定某个模块开放或关闭,因为游戏是实时运行的,比如有大量玩家在线是不能把游戏关掉然后上传新的版本更新的,这个时候对于一些不重要的出问题的系统,比如邮件或者聊天可以临时关掉。

随时控制物品的产生,可能现在和咱们这个确实不太搭,随时控制物品的产生,什么意思?比如说咱们有一些抽奖,会控制一个物品产生的概率,因为原来比如说概率是十万分之一,结果少了一个零,变成了万分之一,所以说拿个开关把他控制一下把他关掉,这个东西就不许出。当你做产品做到高级别的时候,你会发现自己不光是技术,绝对和业务相关。

随时控制任务ID的完成和接取,他用任务的原因就是他有利益,任何玩家去操作系统的某一个漏洞的时候都是因为利益,不光是网站或者说移动互联网,原来咱们有刷任务,刷金币,这个时候怎么办?就把任务关掉,不能维护服务器,维护服务器成本太高。


参考文章 原博瑞游戏CTO 田博辉——MMO游戏服务器性能监控及优化分享-在线文稿

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351