一次艰难的线上游戏服务器内存排查经历
💡
原文中文,约1900字,阅读约需5分钟。
📝
内容提要
经过排查,发现游戏服务器在不同云服务商上内存差异显著是由于透明大页设置不同。调整配置后,内存使用一致。
🎯
关键要点
- 游戏服务器程序使用Go编写,启动内存从350M降低到150M。
- 使用两个云服务商部署服务器,内存使用差异显著,一个为150M,另一个为240M。
- 使用pprof分析内存分配信息,发现两个进程的内存管理差异不大。
- 考虑到操作系统线程和goroutine的影响,内存碎片率不可能造成如此大的差异。
- 检查进程的/proc/pid/smaps,未发现数据表文件的映射。
- 使用getconf PAGESIZE确认两个系统的页大小均为4K。
- 通过pmap -x命令对比两个进程的内存信息,发现虚拟内存和实际内存使用存在差异。
- 运维同学怀疑是透明大页导致的内存差异,经过调整配置后,内存使用一致。
➡️