Zalecana, 2024

Wybór redaktorów

Jak inżynierowie Facebooka pokonują nieuchwytne wycieki pamięci aplikacji

📲 5 APLIKACJI, KTÓRE ZWIĘKSZĄ MOŻLIWOŚCI TWOJEGO TELEFONU

📲 5 APLIKACJI, KTÓRE ZWIĘKSZĄ MOŻLIWOŚCI TWOJEGO TELEFONU
Anonim

Programiści potrzebujący przerwy od sesji debugowania maratonu mogą chcieć przeczytać post na blogu od dwóch inżynierów oprogramowania Facebooka, którzy oferują porady i opowiadania wojenne o wykorzenianiu nieuchwytnych błędów pamięci w aplikacji na iOS sieci społecznościowej.

Błędy pamięci mogą być wyjątkowe uciążliwe dla deweloperów, biorąc pod uwagę, jak ciężko je debugować. Jeśli kiedykolwiek korzystałeś z aplikacji na Facebooku lub innej działającej aplikacji, po prostu przestań działać i znikaj, najprawdopodobniej jest to spowodowane błędem pamięci.

"Przy niektórych narzędziach, migracji do najnowszych technologii iOS i trochę Sprytny sposób zmierzenia problemu sprawił, że nasza aplikacja stała się bardziej niezawodna "- napisał Ali Ansari i Greg Pstrucha w nowym wpisie na Facebooku Engineering Blog.

W skrócie, uruchomiony program znika, ponieważ system operacyjny zabił go, najprawdopodobniej dlatego, że aplikacja zaczęła robić rzeczy poza przydzieloną przestrzenią pamięci. System operacyjny przypisuje każdemu uruchomionemu programowi pewien zakres pamięci systemowej do wykonania swojej pracy.

System operacyjny może również zakończyć program, jeśli nagle zaczyna żądać dużej ilości dodatkowej pamięci, co może się zdarzyć, jeśli wystąpi wyciek pamięci może w końcu zużyć całą pamięć systemu. Może także zabić doskonale działający program, gdy z samego powodu systemowi brakuje pamięci systemowej.

Facebook

W żargonie inżynieryjnym na Facebooku błąd BOOM (błąd braku pamięci w tle) ma miejsce, gdy program umiera w tle, a FOOM jest, gdy program na ekranie nagle umiera.

iOS wysyła komunikat do aplikacji ostrzegający o zbliżającym się zamknięciu, ale nie ma gwarancji, że aplikacja zarejestruje tę wiadomość przed jej wysłana do pustki.

"Nie mamy łatwego sposobu, aby dowiedzieć się, że aplikacja została zabita przez system operacyjny z powodu presji pamięci" - napisali inżynierowie.

Niemniej inżynierowie Facebooka opracowali szereg technik które obniżyły ogólny wskaźnik awarii pamięci w aplikacji na iOS.

Jedną z technik, które okazały się przydatne, jest uczynienie aplikacji mniej grymaśną pod względem proszenia o pamięć systemu operacyjnego, a następnie rezygnacji z niej

inżynierowie Facebooka początkowo uważali, aby używać tylko ilości pamięci potrzebne. Ilekroć aplikacja będzie potrzebowała więcej pamięci, aby wykonać działanie, takie jak przeglądanie strony internetowej, poprosi system operacyjny o więcej, a następnie natychmiast porzuci tę pamięć, gdy zadanie zostanie zakończone.

To podejście jednak nie działało. Zmniejsz liczbę awarii w aplikacji. W wielu przypadkach ta rezygnacja z pamięci nie została nawet odzyskana przez iOS.

Zamiast tego, co wydawało się pomóc obniżyć wskaźnik awarii, było dokonanie kilku zmian w ilości przydzielonej pamięci. Aplikacja poprosi o całą pamięć potrzebną do uruchomienia, a potem spróbuje działać w tych granicach.

Ta metoda ograniczyła awarie programu o około 30 procent.

Apple dostarczył dodatkową pomoc w przydzielaniu pamięci. W wersji 8 systemu iOS udostępniono nową klasę programowania o nazwie WKWebView, która odciąża przeglądanie stron sieci Web jako oddzielny proces.

Zespół Facebooka wykorzystał także kilka wewnętrznych narzędzi do wykrywania potencjalnych błędów pamięci.

Jednym z nich było narzędzie do skanowania opracowane przez Facebooka wewnętrznie i wydane jako open source, zwane infrastrukturą CT-Scan, które pierwotnie stworzono do tuningu wydajności aplikacji mobilnych. Okazało się również skuteczne w wykrywaniu wycieków pamięci.

Zespół opracował także nowy profiler pamięci w aplikacji, który śledzi wszystkie alokacje pamięci wykonane przez program, bez dodawania narzutów do samego programu. Pozwala to Facebookowi na zbieranie cech operacyjnych testowej kopii programu w trakcie jego działania.

Podczas aktualizacji programu zespół może porównać ilość pamięci przydzielonej przez różne procesy między nową wersją a starszymi wersjami. Olbrzymia rozbieżność między tymi dwoma może wskazywać na nieodkryty dotąd wyciek pamięci.

Popularne kategorie

Top