Finding and Fixing Ghostty's Largest Memory Leak
4 months ago
- #memory-leak
- #terminal-emulator
- #debugging
- Ghostty 消耗了异常高的内存,有报告显示运行10天后内存占用高达37GB。
- 该内存泄漏问题自Ghostty 1.0版本就存在,但随着Claude Code等CLI应用的流行变得明显。
- Ghostty使用PageList数据结构管理终端内存,通过mmap分配标准和非标准内存页。
- 滚动修剪优化方案错误地将最旧页面复用为最新页面,且未调整非标准页面大小,导致内存泄漏。
- 修复方案规定在滚动修剪时绝不复用非标准页面,确保内存正确释放。
- 新增了macOS虚拟内存标签功能,用于追踪和调试PageList相关的内存分配。
- Ghostty采用多种泄漏检测手段,包括调试版本、单元测试、valgrind CI测试和macOS Instruments工具。
- 社区提供的详细诊断和复现努力对定位和修复泄漏起到了关键作用。