« Tüm yayınlar

Rust ile Yazılan macOS NVR'sinde Gizli Bellek Sızıntısı Nasıl Bulundu

Rust tabanlı macOS NVR'sinde libmalloc zone'ları ve özel metriklerle bulunan wgpu kaynaklı bellek sızıntısının hikayesi.

Murlet adlı Electron+Rust tabanlı macOS ağ video kaydedicisinin geliştiricisi, uygulamanın haftalarca kesintisiz çalışması gerektiği için bellek sızıntısı olmadığını kanıtlamaya çalışırken aslında bir sızıntı olduğunu keşfetti. Sorun, hâlâ erişilebilir durumda olan veri yapılarının yavaşça büyümesinden kaynaklandığı için macOS'un leaks komutu veya LeakSanitizer gibi araçlar tarafından yakalanamıyordu.

Çözüm için Rust'ın global allocator'ı libmalloc'un zone API'si üzerinden özelleştirildi; böylece Rust tahsisleri, Electron'un PartitionAlloc'undan ayrılarak kendi adlandırılmış belleğine yönlendirildi. Bu sayede vmmap, Rust yığınını ayrı bir satır olarak raporlayabildi ve heap ile malloc_history gibi standart hata ayıklama araçlarıyla incelenebilir hale geldi.

Geliştirici ayrıca task_info, VM bölge sayımı ve zone bazlı malloc istatistiklerini periyodik olarak toplayıp loglayan bir aktör ekleyerek bellek metriklerini zaman içinde grafiğe dökülebilir hale getirdi. Bu izleme sayesinde sızıntı, hata durumlarında tekrar tekrar tetiklenen wgpu kütüphanesine kadar izlendi; sorun wgpu'nun ana geliştirme dalında zaten giderilmişti.

Bu yaklaşım, uzun süre kesintisiz çalışması gereken Rust tabanlı yerli eklentiler geliştiren mühendisler için, üçüncü taraf bağımlılıklardaki sessiz bellek büyümesini tespit etmek adına pratik ve tekrarlanabilir bir yöntem sunuyor.

Bu sentez, kaynağından yapay zeka tarafından üretildi; insan editör ya da elle onay adımı yoktur. Nasıl çalışıyoruz