В докладе будет рассмотрена система контроля качества с помощью снятия и анализа крэшдамп-файлов (применительно в первую очередь к системе Windows). Будет представлена архитектура и инструментарий для организации автоматического сбора и анализа крэшдамп-файлов, снимаемых в момент возникновения проблем в приложениях (падения, зависания, превышение потребления ресурсов – памяти, файловых дескрипторов и т.д.)
2. About me
Anton Naumovich
Development Manager at LogicNow
Developer at Microsoft (Hyper-V) in the past
Specializing in performance, debugging,
troubleshooting
8. Take a memory dump!
Dump is a snapshot of process memory
Problem root cause can be located from the dump
The fact that dump is taken is an “attention!” signal
11. Taking a process dump
We need a “non-involved” controller process
SuperController.exe
Controller app
SuperApp.exe
Worker app
Dump
file
Monitoring
Taking dumps
12. Apps capable of taking dumps
Process Explorer (full, mini)
Task Manager (full)
ProcDump (full, mini, and much more)
13. ProcDump: basics
-c CPU threshold above which to create a dump of the process
-e Write a dump when the process encounters an unhandled exception
-m Memory commit threshold in MB at which to create a dump
-t Write a dump when the process terminates
-h Write dump if process has a hung window
-p Trigger on the performance counter when the threshold exceeded
14. ProcDump: advanced
-w Wait for the specified process to launch if it's not running
-s Consecutive seconds before dump is written (default is 10)
-n Number of dumps to write before exiting
-r Dump using a clone
-i Install ProcDump as the AeDebug postmortem debugger
-ma Write a dump file with all process memory
20. Key analysis features
Dump fuzzy matching and grouping by stack
Integration with issue tracking (Jira)
Analyze dump by user request
Notifications about new/critical problems
21. Symbol Server
- Storage and access to app debugging symbols
- Dramatically speeds up debugging
24. What can you do tomorrow?
Setup symbol server (simply a shared folder)
Use a script to monitor problems and capture dumps
Use a script to analyze dumps
25. Toolset
Debugging Tools for Windows (cdb, windbg)
http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx
Sysinternals tool suite (procdump, procexp)
http://technet.microsoft.com/en-us/sysinternals/bb545021.aspx
Google Breakpad library
https://code.google.com/p/google-breakpad/
Windows API: Debug Help family
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679309(v=vs.85).aspx
Microsoft Symbols Server
http://en.wikipedia.org/wiki/Microsoft_Symbol_Server
26. 1. Speed up defect location
2. Immediate reaction to critical problems
3. Version quality indicators
4. Improve stability
Profit
Я расскажу о контроле качества в реальном времени - то есть не в “лабораторных” условиях, а во время того, как приложение выполняет свою реальную работу на машинах конечных пользователей.
Фактически, речь пойдет о построении системы обратной связи из продакшена в “Центр Управления Полетами” :)
Такая система находится в сфере интересов и на стыке компетенции многих отделов - Development, QA+Automation, Support
Нас будут интересовать такие показатели качества как:
падения (выполнение недопустимой операции) - все видели такое окошечко, скоро мы узнаем что происходит за кулисами когда мы соглашаемся отправить отчет
подвисания - когда приложение перестает отвечать на внешние раздражители
потребление памяти - либо утечки, либо просто нерациональное ее использование
потребление процессора
и дугие - специфические для предметной области, или комбинированные перечисленные выше.
Причина как правило в 90% случаев - это человеческий фактор, т.е. ошибки разработчиков. Мы все люди, мы все делаем ошибки, и будем их делать.
Нюансы сторонних библиотек и разнообразие окружения - это зачастую тоже человеческий ошибки, только других людей.
В Windows, как и в других операционных системах, есть встроенная возможность снимать с процесса слепок памяти в любой момент времени
Причем беглого анализа достаточно чтобы найти причину того или иного отклонения
Более того, очень важно, параметры отклонений можно подобрать так, что сам факт наличия дампа - уже сигнал “Внимание”
Поговорим о том, как же снимать дампы
В докладе приводится сквозной пример - приложение SuperApp.
Обычно если приложение должно работать в фоне, то в связке с ним идет и приложение-контроллер SuperController, который отвечает за то чтобы его подопечный жил и функционировал.
Так вот, это приложение-контроллер можно нагрузить дополнительной работой и заставить мониторить важные показатели жизнедеятельности реального работника, и в случае отклонений этих показателей от нормы снимать дамп с наблюдаемого.
Также, дампы умеют снимать Task Manager (встроенный в Windows) и очень мощная утилита procdump из sysinternals - на ней мы остановимся подробнее для демонстрации спектра возможностей.
В качестве примеров Performance Counter - ов можно привести количество открытых файлов, количество прочитанных с диска или отосланных в сеть байт, и так далее.
Немного технических деталей об анализе дампов.
Для анализа нужны три компонента - отладочная информация, исполняемый файл и отладочные символы
Анализ - это очень просто, то же самое что и отладка, то есть любой программист априори умеет это делать
Это элементарно автоматизируемо, например с помощью отладчика cdb
Пример - проблема обычно кроется в самых последних фреймах - вот выход за границы вектора
Мы знаем как собирать и как анализировать дампы - если связать все вместе, получится такая картина.
На клиенте
На клиентской стороне SuperApp и SuperController работают в паре - SuperApp делает свою работу, SuperController следит за ним
Как только происходит отклонение - SuperController снимает дамп и отсылает его на сервер (например, по протоколу FTP или HTTP) вместе со вспомогательной информацией.
На сервере
Присланный дамп попадает в хранилище, например на файловой системе или в базе данных
В фоне процесс-аналитик SuperAnalyst запускает анализ дампов, извлекая нужную эксперту информацию
О самых критичных проблемах процесс-аналитик сообщает эксперту например через почту или SMS. Иногда надо среагировать мгновенно.
Технология для облегчения доступа к отладочной информации разных версий. Не нужно тратить время на поиск символов, достаточно просто указать один адрес, остальное сделает отладчик.
Любое более-менее серьезное приложение имеет похожую систему обратной связи - например Windows, Mozilla и т.п.
С помощью бесплатных Debugging Tools for Windows и SysInternals можно организовать подобную систему в тестовой лаборатории - причем за считанные дни, причем практически без дополнительных усилий со стороны программистов.