SlideShare a Scribd company logo
Life with out of
memory
Опыт LiveJournal
Денис Батвинкин
Rambler&Co
100% OOM-Free Сессии
2
Один из первых релизов
Title
April
OOM-FreeSession
40,00
55,00
70,00
85,00
100,00
iPhone5S iPhone7 iPhone 4S iPad2
51
79
94
87
3
4
Адресное пространство приложения
Kernal
space
Stack
space
User
space
6
Адресное пространство приложения
Kernal
space
Stack
space
User
space
(Virual memory)
Kernal
space
Stack
space
User
space
App
space
Virtual memory
7
Адресное пространство приложения
Kernal
space
Stack
space
User
space
Kernal
space
Stack
space
User
space
App
space
Kernal
space
Stack
space
User
space
Free App
space
Used
space App space
Virtual memory
8
Кейс Realm c mmap
9
Jettison - memory
hunter
11
18
100
Score
foreground
app
Score
suspended
app
12
xnu kernel событие
NOTE_VM_PRESSURE
13
didReceiveMemoryWarning
UIKit событие
xnu kernel событие
NOTE_VM_PRESSURE
14
No pressure, Mon!
http://newosxbook.com/articles/MemoryPressure.html
15
Инструменты для решения
проблемы
• Allocations, Leaks и Time Profiler
• applicationDidReceiveMemoryWarning и
didReceiveMemoryWarning
• Краш-репортеры Testflight, Crashlytics,
Hockeyapp
• JRFMemoryNoodler, TBOOMDetector
17
Инструменты для решения
проблемы
• Allocations, Leaks и Time Profiler
• applicationDidReceiveMemoryWarning и
didReceiveMemoryWarning
• Краш-репортеры Testflight, Crashlytics,
Hockeyapp
• JRFMemoryNoodler, TBOOMDetector
18
Инструменты для решения
проблемы
• Allocations, Leaks и Time Profiler
• applicationDidReceiveMemoryWarning и
didReceiveMemoryWarning
• Краш-репортеры Testflight, Crashlytics,
Hockeyapp
• JRFMemoryNoodler, TBOOMDetector
19
Логи Testflight
20
Лог OOM
21
Лог OOM
Crash
22
https://developer.apple.com/library/content/technotes/tn2151/_index.html#//
apple_ref/doc/uid/DTS40008184-CH1-
Understanding and Analyzing Application Crash Reports
23
Crash Reports сервисы
24
25
https://code.facebook.com/posts/1146930688654547/
reducing-fooms-in-the-facebook-ios-app/
Reducing FOOMs in the Facebook iOS app
26
Инструменты для решения
проблемы
• Allocations, Leaks и Time Profiler
• applicationDidReceiveMemoryWarning и
didReceiveMemoryWarning
• Краш-репортеры Testflight, Crashlytics,
Hockeyapp
• JRFMemoryNoodler, TBOOMDetector
19
TBOOMDetector JRFMemoryNoodler
Определяют OOM событие во время следующего
запуска
27
Проблемы которые мы
решили до первого релиза
• Блюр на экране поста
• Экраны при рекурсивном переходе по
навигейшен стеку
• Большие изображения в постах
• Получение больших объемов данных с сервера
29
Супер стабильное
приложение
VIPER
30
Супер стабильное приложение и
команда
31
Егор
Катя
Бэкенд
АПИ
Вадим
Настя
ТЗ
М
иш
а
Костя
Дима
Кто-то с чердака
LiveJournal
Title
April
OOM-FreeSession
40,00
55,00
70,00
85,00
100,00
iPhone5S iPhone7 iPhone 4S iPad2
80
92
9998
32
Слабые места:
GIF и UIWebView
33
Паттерн Producer/Consumer
producer Consumer
Image buffer
THREAD1 THREAD1 34
http://engineering.flipboard.com/2014/05/animated-gif
GIFS
35
Очистка кеша для результатов запроса
и картинок
36
Title
May
OOM-FreeSession
40,00
55,00
70,00
85,00
100,00
iPhone5S iPhone7 iPhone 4S iPad2
85
89
9898
37
Аналитика для Answers
38
Создание файл логгера
39
Лог процессора и памяти
40
В этот раз с памятью все ок
41
Причина всех бед - RESTKit
42
Выводы
• Используйте все доступные способы
обнаружения ошибок
• Не всегда решение бывает явное
• Проводите бета тестирование вашего
приложения
• Не используйте RESTKit в ваших приложениях
43
https://forums.developer.apple.com/thread/45177
Иногда наше приложение ниучем не уиновато
44
d.batvinkin@rambler-co.ru

More Related Content

PPT
Casio Exilim desant autumn
PDF
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
PPTX
Жизненный цикл мобильной игры глазами тестировщика‏
PPTX
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
PDF
Особенности тестирования мобильных приложений (Android, iOS)
PDF
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
PDF
Состояние Состояния / Алексей Охрименко (IPONWEB)
PPTX
Дмитрий Чирков, "Технологический стартап", занятие 2, 21.03.2012
Casio Exilim desant autumn
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
Жизненный цикл мобильной игры глазами тестировщика‏
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
Особенности тестирования мобильных приложений (Android, iOS)
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Состояние Состояния / Алексей Охрименко (IPONWEB)
Дмитрий Чирков, "Технологический стартап", занятие 2, 21.03.2012

More from RAMBLER&Co (20)

PDF
RDSDataSource: Основы LLVM
PDF
Rambler.iOS #9: Анализируй это!
PDF
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
PDF
RDSDataSource: Чистые тесты на Swift
PDF
RDSDataSource: OCLint
PDF
RDSDataSource: Построение UML диаграмм
PDF
RDSDataSource: App Thinning
PDF
RDSDataSource: Мастер-класс по Dip
PDF
RDSDataSource: YapDatabase
PDF
Rambler.iOS #8: Чистые unit-тесты
PDF
Rambler.iOS #8: Сервис-ориентированная архитектура
PDF
Rambler.iOS #8: Make your app extensible with JavaScriptCore
PDF
Rambler.iOS #8: Как не стать жертвой бэкендеров
PDF
RDSDataSource: iOS Reverse Engineering for inexperienced
PDF
RDSDataSource: Автогенерация документации для SDK
PDF
RDSDataSource: Плюрализация в iOS
PDF
RDSDataSource: Promises
PDF
RDSDataSource: Flux, Redux, ReSwift
PDF
Rambler.iOS #7: Построение сложного табличного интерфейса
PDF
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложении
RDSDataSource: Основы LLVM
Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
RDSDataSource: Чистые тесты на Swift
RDSDataSource: OCLint
RDSDataSource: Построение UML диаграмм
RDSDataSource: App Thinning
RDSDataSource: Мастер-класс по Dip
RDSDataSource: YapDatabase
Rambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Сервис-ориентированная архитектура
Rambler.iOS #8: Make your app extensible with JavaScriptCore
Rambler.iOS #8: Как не стать жертвой бэкендеров
RDSDataSource: iOS Reverse Engineering for inexperienced
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Плюрализация в iOS
RDSDataSource: Promises
RDSDataSource: Flux, Redux, ReSwift
Rambler.iOS #7: Построение сложного табличного интерфейса
Rambler.iOS #7: Прием платежей по банковским картам в iOS приложении
Ad

Rambler.iOS #9: Life with out of memory