最近需求少了,终于有时间修一下底层的 bug,做一点工具方便查 bug,写篇文章简单记录一下。

一是优化了一个玩法进程的启动速度。这个玩法需要用战力做匹配,玩家按战力分段放进不同的桶里,每个桶用 skiplist 组织。启动服务器的时候,会遍历所有玩家,放进对应的桶里,方便正式开放的时候进行搜索匹配。之前是遍历策划配置的战力分段表,高端玩家几乎要遍历完整个表才能进到桶里。现在改成了二分查找,匹配速度提高了好多

二是隔壁组做 mmo 的同事,问了下有没有现成的查内存泄漏的工具。他们加班的比较凶,周六晚加完后,周一发现服务器被 OOM Killer 杀掉了。。。于是整合了一下云风的 lua-snapshot,做到 skynet 里面, 提了个 PR。原理比较简单,第一次调用 snapshot 的时候,对 VM 的内存对象做一次镜像。做了某个可疑操作后,再调一次 snapshot,前后镜像做比对。我对比较出来的对象按层次组织了一下,方便日志里打印。

三是修复了 gosproto 的 pack 函数。这个 bug 相当诡异,会打出来一个客户端无法解包的 sproto 包。 详情见 github 上的 PR,顺便读了下 sproto 的 pack 的文档 ,0xFF 后面接的 N 是拷贝 (N+1)*8 bytes 的意思,之前理解错了。。 unpack 应该还有问题,还在看。。。