Önerilen, 2024

Editörün Seçimi

Facebook mühendisleri, zor uygulama belleği sızıntılarını nasıl ele geçirir?

Facebook Durduruldu Hatası Çözümü

Facebook Durduruldu Hatası Çözümü
Anonim

Maraton hata ayıklama oturumlarına ara vermek isteyen programcılar, sosyal ağdaki iOS uygulamasında zor bellek hatalarının köklenmesiyle ilgili ipuçları ve savaş hikayeleri sunan iki Facebook yazılım mühendisinden bir blog yayınını değerlendirmek isteyebilir.

Bellek hataları özel olabilir. geliştiriciler için sıkıntı, hata ayıklamak için ne kadar zor verilir. Facebook uygulamasını veya başka çalışan bir uygulamayı hiç izlemediyseniz, yalnızca çalışmayı durdurun ve kaybolursun, büyük olasılıkla bir bellek hatası nedeniyle meydana gelir.

"Bazı araçlar, en yeni iOS teknolojilerine geçiş ve biraz ilk etapta problemi ölçmek için akıllıca bir uygulama yaptık, daha güvenilir hale getirdik, "Ali Ansari ve Greg Pstrucha'yı Facebook Mühendislik Blogu'ndaki yeni bir yazıyla yazdık.

Kısaca, çalışan bir program yok oluyor çünkü işletim sistemi, büyük olasılıkla uygulama, ayrılan bellek alanı dışında şeyler yapmaya başladığı için onu öldürdü. İşletim sistemi, her çalışan programa, çalışmasını yapmak için bir sistemin belleğine atanır.

İşletim sistemi, aniden büyük miktarlarda ek bellek istemeye başlarsa bir programı sonlandırabilir; sonunda tüm sistemin belleğini tüketebilir. Sistemin diğer nedenlerden dolayı sistem belleği tükendiğinde mükemmel çalışan bir programı da öldürebilir.

Facebook

Bir Facebook programında, bir BOOM (arka planda bellek hatası) bir program olduğunda arka planda ölür ve FOOM, ekrandaki bir programın aniden öldüğü zamandır.

iOS, bir uyarının yakın olacağını bildiren bir uyarı mesajı gönderir, ancak uygulamanın bu mesajı daha önce kaydettireceğine dair bir garanti yoktur. boşluklara gönderildi.

"Bu, uygulamaların OS tarafından bellek baskısı nedeniyle öldürüldüğünü bilmenin kolay bir yolunu bırakmıyor," diye yazıyor mühendisler.

Yine de, Facebook mühendisleri bir dizi teknik geliştirdiler. iOS uygulamasının bellek çöküşlerinin toplam hızını düşürdü.

Kullanıcının kullanışlı bulduğu bir teknik, uygulamayı işletim sisteminden bellek istemek ve sonra bırakmaktan vazgeçmesidir.

Facebook mühendisleri başlangıçta sadece hafıza miktarını kullanmak konusunda vicdanlıydı gerekli. Bir uygulama daha fazla belleğe ihtiyaç duyduğunda, bir Web sayfasını görüntülemek gibi bir eylemi gerçekleştirmek için, işletim sistemini daha fazla talep eder ve görev bittiğinde bu anıyı derhal terk eder.

Ancak bu yaklaşım Uygulamadaki kilitlenme sayısını azaltmayın. Pek çok durumda, bellekte kalan bellek iOS tarafından bile geri alınmadı.

Bunun yerine, kilitlenme oranının düşürülmesine yardımcı olan şey, ayrılan bellek miktarında birkaç değişiklik yapmaktı. Uygulama başladığında ihtiyaç duyduğu tüm belleği isteyecektir, sonra bu sınırlar içinde çalışmaya çalışın.

Bu yaklaşım tek başına program çökmelerini yaklaşık yüzde 30 azalttı.

Apple, bellek ayırma konusunda da ek yardım sağladı. IOS'un 8. sürümünde, WKWebView adlı yeni bir programlama sınıfı sağladı. Bu, Web sayfalarının görüntülenmesini ayrı bir işlem olarak kaldırıyor.

Facebook ekibi ayrıca potansiyel bellek hatalarını algılamak için dahili olarak geliştirilmiş birkaç araç kullandı.

Biri dahili olarak Facebook tarafından geliştirilen ve mobil uygulamaların performansını ayarlamak için geliştirilmiş olan CT-Scan altyapısı olarak adlandırılan açık kaynak olarak piyasaya sürülen bir tarama aracıydı. Bellek sızıntılarını da tespit etmek için etkili olduğu ortaya çıktı.

Ekip ayrıca, programın kendisine ek yük getirmeden, program tarafından yapılan tüm bellek ayırmalarını izleyen yeni bir uygulama içi bellek uzmanı geliştirdi. Bu, Facebook'un çalışmakta olduğu programın bir test kopyasının operasyonel özelliklerini toplamasına izin verir.

Program güncellendikçe, ekip yeni sürüm ve eski sürümler arasında farklı işlemlerle ayrılan bellek miktarını karşılaştırabilir. Bu ikisi arasında dev bir farklılık, şimdiye kadar keşfedilmemiş bir bellek sızıntısına işaret edebilir.

Top