在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前一阵开始和同事一起优化内存,首先是优化 Lua 内存,因为发现每次战斗完后 Lua 内存非常大,从 3M 左右在经过了10次左右的战斗后,会暴增到近 100M,很明显是有内存泄漏。
然后我正式启动该工作,基本思路就是递归遍历内存中所有的数据,表,函数,协程,用户数据,查看未释放和笔误引起的全局变量泄漏;于是通过搜索我参考了以下资料:
以上资料有各自的参考价值,但是也有些不正确和不符合我要求的地方,一是搜索的根节点不是从 _G 开始,而是从 debug.getregistry 开始,否则你会遗漏很多数据;二是我不想用 c 写,而是直接用 lua 实现,把结果打印到 txt 里。
首先我的搜索方式如下以递归的方式进行:
通过以上方式,解决了项目中的 Lua 内存泄漏,长时间连续游戏,Lua 内存稳定在 3.5M 左右,高峰时 会到 5M。
2017-05-05 更新:
【Written by yaukey. 若无特殊说明本博客文章均为原创,转载请注明作者yaukey和本博客地址(http://www.cnblogs.com/yaukey/)。】
|
请发表评论