整理多伦多服务器内存持续增长(内存泄漏)的排查实战。
内存持续增长可能导致 OOM。以下是排查实战。
一、现象 - 内存占用缓慢上升 - 定时重启才能缓解 - 最终触发 OOM Kill
二、定位 1) free -m 看整体 2) top/ps 按内存排序 3) 定位进程后看其增长曲线 4) valgrind/pprof 分析应用
三、常见原因 1) 应用对象未释放 2) 缓存无限增长 3) 连接/句柄未关闭 4) 全局变量累积
四、排查工具 - Java:jmap、MAT - Go:pprof - Node:heapdump - C/C++:valgrind
五、解决办法 - 修复泄漏代码 - 缓存设置上限和过期 - 关闭无用连接 - 增加监控告警
六、临时缓解 - 定期重启 - 限制内存上限 - OOM 自动拉起
七、预防 1) 内存监控曲线 2) 压测发现泄漏 3) 代码审查 4) 混沌演练
总结:内存泄漏要先用工具定位进程和代码,再修复并加监控。