Ana Sayfa

Ghostty'deki Büyük Bellek Sızıntısı Nasıl Giderildi?

1 dk okuma

Ghostty terminal emülatöründe kullanıcıların 10 gün içinde 37 GB gibi absürt bellek tüketimleri rapor etmesiyle ortaya çıkan ciddi bir bellek sızıntısı nihayet giderildi. Bu sızıntı, Ghostty 1.0 sürümünden beri mevcut olsa da, özellikle Claude Code gibi popüler CLI uygulamalarının yaygınlaşmasıyla tetikleyici koşulların sıkça oluşmasıyla belirgin hale geldi. Sızıntının teşhis edilmesi, yalnızca belirli koşullarda ortaya çıkması nedeniyle oldukça zorlayıcıydı.

Ghostty, terminal içeriğini yönetmek için PageList adı verilen, bellek sayfalarından oluşan çift yönlü bağlı bir liste kullanır. Bu sayfalar, mmap ile ayrılan ve performans için bir bellek havuzundan çekilen standart boyutlu bloklardır. Ancak, çok sayıda emoji, stil veya köprü içeren satırlar gibi özel durumlarda, havuzun dışında doğrudan mmap ile daha büyük, standart dışı sayfalar tahsis edilir. Bir sayfa serbest bırakılırken, standart boyutlu olanlar havuza geri dönerken, standart dışı olanlar munmap ile doğrudan serbest bırakılır.

Sızıntının temelinde, terminalin geçmişini sınırlayan scrollback-limit yapılandırmasıyla ilgili bir optimizasyon yatıyor. Yoğun veri çıkışlarında bellek ayırma ve serbest bırakma maliyetinden kaçınmak için, en eski sayfanın en yeni sayfa olarak yeniden kullanılması stratejisi benimsenmişti. Makale, bu optimizasyon etrafındaki bir mantık hatasının sızıntıya yol açtığını belirtiyor. Düzeltme, Mart ayında yayınlanacak olan 1.3 sürümünde yer alacak.

İçgörü

Bir terminal emülatöründeki bellek yönetimi optimizasyonunun, belirli koşullar altında nasıl devasa bellek sızıntılarına yol açabileceğini ve bu tür sorunların teşhisinin ne kadar karmaşık olabileceğini gösteriyor.

Kaynak