Hasty Briefsbeta

双语

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工具。
  • 社区提供的详细诊断和复现努力对定位和修复泄漏起到了关键作用。