Erlang单服游戏开发记录2
经过一段时间开发,大部分功能已经完成,开始了性能测试以及调优,遇到一些性能热点:
1、主游戏服务由于每个玩家是单独的状态线程,表现良好,但其中的一个玩家数据管理服务(主要提供查找以及广播)出现了调用超时。
2、大厅的数据管理服务(主要提供查找以及动态创建、销毁)出现了调用超时。
3、数据服务出现了调用超时。
以上测试均在开启了5000个玩家机器人,每秒并发200-300时进行。而超时错误一般都是由于处理速度远低于消息队列形成,而增大超时设置(默认是5秒)是极不推荐的做法,应该从根源上进行分析:
1、经过性能分析检查,发现在世界聊天广播时消耗的时间过大, 最大值达到了7秒,而正常测试时,给5000人发一个1024的消息,消耗的时间也不足1ms,这个时间是怎么上升的呢?根据上面的提示,在高并发下,消息队列的形成时间远小于广播的时间,造成广播处理的耗时不断的变大,从不足1ms,上升到143ms,再上升到2059ms,不到10秒钟,接下来的调用请求全部都超时了。
2、有了前面的经验,对大厅的性能热点原因分析,也很顺利,只是进一步发现了,在高并发下,虽然需要处理的人数下降了很多(一个大厅100人),但就是这100人的广播,也遇到同样的几何级数增长,导致调用超时。
3、 数据服务的调用超时就比较有趣,原因在于日志关闭得不够彻底,提供到error级别后,性能上升,但在数据库中的角色帐号达到20000条后,同样出现了调用超时。