Lua 内存泄漏排查实战:从 GC 原理到线上定位
Lua 内存分析与泄漏排查 适合读者:需要排查线上 Lua 内存泄漏、分析 GC 压力的开发者 本文以 Lua 5.3/5.4 为基础,结合游戏服务器实际场景 第一章:Lua 内存管理概览 1.1 Lua 的内存模型 Lua 的内存管理采用自动垃圾回收(GC),开发者不需要手动分配/释放内存。所有对象(Table、Function、String、Userdata)都由 GC 统一管理。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Lua 进程内存分布: ┌─────────────────────────────────────┐ │ C 层面分配(lua_newstate) │ ← Lua State 本身 ├─────────────────────────────────────┤ │ Lua 栈(lua_stack) │ ← 每个 lua_State 的栈空间 ├─────────────────────────────────────┤ │ GC 对象(可回收) │ ← Table, Function, String, Userdata │ ├── Table │ │ ├── Function (闭包) │ │ ├── String (短字符串/长字符串) │ │ ├── Userdata │ │ └── Thread (协程) │ ├─────────────────────────────────────┤ │ GC 元数据 │ ← GC 链表的辅助结构 └─────────────────────────────────────┘ 1.2 Lua GC 的工作方式 Lua 5.3/5.4 使用三色标记-清除(Tri-color Mark-and-Sweep) 算法,分步执行: ...