Empfohlen, 2024

Die Wahl des Herausgebers

Wie Facebook-Ingenieure schwer fassbare App-Speicherlecks erobern

Mythos Maschinenbaustudium: Dem Ingenieur ist nichts zu schwer

Mythos Maschinenbaustudium: Dem Ingenieur ist nichts zu schwer
Anonim

Speicherfehler können etwas Besonderes sein Ärgernis für Entwickler, da sie schwer zu debuggen sind. Wenn Sie jemals die Facebook-App oder eine andere laufende App hatten, hören Sie einfach auf zu laufen und verschwinden, es ist sehr wahrscheinlich wegen eines Speicherfehlers.

"Mit einigen Werkzeugen, Migration zu den neuesten iOS-Technologien und ein bisschen von Cleverness, um das Problem in erster Linie zu messen, konnten wir unsere App zuverlässiger machen ", schrieben Ali Ansari und Greg Pstrucha in einem neuen Post auf dem Facebook Engineering Blog.

Kurz gesagt, ein laufendes Programm verschwindet, weil Das Betriebssystem hat es getötet, höchstwahrscheinlich, weil die App begonnen hat, Dinge außerhalb ihres zugewiesenen Speicherplatzes zu erledigen. Das Betriebssystem weist jedem laufenden Programm einen Bereich des Arbeitsspeichers eines Systems zu.

Das Betriebssystem kann auch ein Programm beenden, wenn es plötzlich große Mengen zusätzlichen Speichers anfordert, was bei einem Speicherleck passieren kann könnte schließlich den gesamten Speicher des Systems verbrauchen. Es kann auch ein perfekt funktionierendes Programm beenden, wenn das System selbst aus anderen Gründen keinen Systemspeicher mehr hat.

Facebook

In Facebook Engineering-Sprache, ist ein BOOM (Hintergrund nicht genügend Speicherfehler) wenn ein Programm stirbt im Hintergrund und ein FOOM ist, wenn ein Programm auf dem Bildschirm plötzlich abbricht.

iOS sendet eine Nachricht an die App, die darauf hinweist, dass ein Herunterfahren unmittelbar bevorsteht, aber es gibt keine Garantie, dass die App diese Nachricht protokolliert "

" Das lässt uns nicht leicht wissen, dass die App aufgrund des Speicherdrucks vom Betriebssystem getötet wurde ", schrieben die Ingenieure.

Trotzdem haben die Facebook-Ingenieure eine Reihe von Techniken entwickelt das hat die allgemeine Geschwindigkeit von Speicherabstürzen seiner iOS-App verringert.

Eine Technik, die sie als nützlich empfanden, ist, die App weniger pingelig zu machen, wenn sie nach Speicher fragt und dann Speicher vom Betriebssystem ableitet.

Facebook-Ingenieure waren anfangs gewissenhaft, nur die Menge an Speicher zu verwenden erforderlich. Immer wenn eine App mehr Speicher benötigt, um eine Aktion wie das Anzeigen einer Webseite auszuführen, würde sie das Betriebssystem nach mehr fragen und dann sofort den Speicher freigeben, wenn die Aufgabe beendet ist.

Dieser Ansatz ist jedoch nicht erfolgt Reduziere die Anzahl der Abstürze in der App nicht. In vielen Fällen wurde dieser Speicher nicht einmal von iOS zurückgewonnen.

Was die Absturzrate zu senken schien, war vielmehr, die Menge des zugeteilten Speichers etwas zu ändern. Die App würde nach all dem Speicher fragen, den sie brauchte, als sie gestartet wurde, und dann versuchen, innerhalb dieser Grenzen zu arbeiten.

Dieser Ansatz reduzierte die Programmabstürze um etwa 30 Prozent.

Apple lieferte zusätzliche Hilfe bei der Speicherzuweisung. In Version 8 von iOS wurde eine neue Programmierklasse mit dem Namen WKWebView bereitgestellt, die das Anzeigen von Webseiten als separaten Prozess auslagert.

Das Facebook-Team verwendete auch eine Reihe von intern entwickelten Tools, um mögliche Speicherfehler zu erkennen.

One war ein von Facebook intern entwickeltes und als Open Source veröffentlichtes Scan-Tool namens CT-Scan-Infrastruktur, das ursprünglich zur Leistungsoptimierung von mobilen Apps entwickelt wurde. Es erwies sich auch als effektiv, um Speicherlecks zu lokalisieren.

Das Team entwickelte auch einen neuen In-App-Speicherprofiler, der alle vom Programm vorgenommenen Speicherzuordnungen verfolgte, ohne dem Programm selbst zusätzlichen Aufwand hinzuzufügen. Dadurch kann Facebook Betriebseigenschaften einer Testkopie des laufenden Programms erfassen.

Wenn das Programm aktualisiert wird, kann das Team die Menge an Speicher vergleichen, die von verschiedenen Prozessen zwischen der neuen Version und älteren Versionen zugewiesen wurde. Eine große Diskrepanz zwischen den beiden könnte auf ein bisher unentdecktes Speicherleck hinweisen.

Top