近期我们游戏上线了一个大的跨服玩法,类似于乱世王者的阉割版,因为不是独立的游戏,而是基于现有游戏开放的一个入口,所以只有采集资源攻城等基本玩法。玩法上线之后,发现有很多游戏体验都不是很友好,例如从入口进入跨服转菊花、游戏内卡顿掉帧、应答不及时等。所以要针对这些问题进行优化。

既然要进行优化,那么就要找到问题的所在,好做到有的放矢。所以我们决定从三个方面进行优化:

1、从逻辑层进行优化

2、底层框架优化

3、JVM参数调优

有了方向,那么撸起袖子加油干吧!

一、逻辑层优化

分析各个模块的代码,发现了几处需要优化的地方

1、排行榜:

现有排行榜请求方式,没有进行分页处理,策划表中配置最大显示100条信息,就会直接返回100条数数据,这也解释了,为什么游戏内排行榜信息请求页面会出现菊花。这样设计不仅影响玩家体验,而且有过多无用数据,所以改成分页请求。这样玩家体验更好,消息更小。

2、行军广播

当有玩家发起行军的时候,现有方式会同步给所有在线的玩家他的行军信息,但是对大部分在线玩家,这个玩家的行军信息是没有用的,也不需要知道,这样不仅占用这服务器的带宽,增加服务器的压力,而且还给玩家的体验带来的负面影响。

对此,我们给每个玩家增加了一个视野范围,每个玩家只要关心他能看到的屏幕内的信息就可以了,当玩家进行移动视角,都会同步当前视野内的信息,这样既减轻了服务器的压力,玩家游戏体验也得到了提升。

3、红屏

一开始红屏信息,是有前端自己进行计算的。当玩家的主城、资源点、联盟建筑被攻打的时候,玩家会红屏,但是玩家行军会有先后顺序,会漏掉红屏信息。所以这部分有服务器来控制,这样会更加准确的显示红屏信息、给玩家体验更好。

4、定时器的慢处理

这部分是通过分析GC日志看出来,很规律的每个一段时间就会触发GC。结合代码发现,定时器触发的时候,会调用很多方法,瞬时创建了很多的对象,从而触发了GC,所以我们对定时器触发的方法进行优化,每次处理的数据进行限制,并且增加慢处理

 

二、底层优化

1、使用对象池

消息池:

看到消息下行的代码发现,每次下行消息的时候,都会创建一个新的对象,针对我们游戏,下行消息会很多,这样会占用太多的新生代内存。所以增加消息的对象池,从而减少YOUNG_GC

DB连接池:

每次查询都创建一个新的连接,程序中有着大量的查询。我们也给连接增加连接池,并且将查询出的数据放到缓存中,下次查询从缓存中查找,没有在去DB中查询,当玩家下线的时候,会根据玩家id外键进行清除缓存。

2、日志等级设置

线上的日志文件越来越大,程序会在一毫秒内打印很多的日志,导致玩家登陆有时候会有延迟。我们将重要的日志打印升级,日志输入等级调整,测试结果确实优化很多。

3、一个方法影响登陆延迟

项目优化提升玩家游戏体验

 

三、JVM参数调优

查看GC日志,发现在程序启动过程中就会触发FullGC,并且在程序运行过程中每小时会触发一下FullGc,分析日志发现新生代增长的过快,导致YOUNGGC触发频繁,所以进行对象池优化,重新分配了新生代和幸存区的比例,启服的时候没有触发FullGc但是YOUNGGC触发频繁,时间也更长了,通过站在前人的肩膀上,启用了G1GC算法,并增加了GC的并发数,发现FullGC得到了很好的优化,YOUNGGC触发频繁,但是用时很少

 

至此,这次优化,基本就是这些内容,这次经验挺宝贵的,所以记录下来,慢慢成长。看着内容并不是很丰富,但是在优化的过程中,一步步分析,然后尝试着优化,却是一段不可多得锻炼。

 

相关文章:

  • 2022-02-05
  • 2021-12-12
  • 2022-12-23
  • 2021-11-03
  • 2021-10-20
  • 2022-01-17
  • 2022-01-09
  • 2021-10-20
猜你喜欢
  • 2021-10-29
  • 2021-10-04
  • 2021-07-25
  • 2022-12-23
  • 2021-12-01
  • 2022-12-23
  • 2021-09-24
相关资源
相似解决方案