Как анализировать файлы дампа после сбора в ОС Windows и Linux

В первой статье по докладу «Дамп – не приговор, а повод задуматься», с которым выступили на конференции INFOSTART TECH EVENT 2024, рассказали, как включать сбор файлов дампов для операционных систем Linux и Windows. Теперь давайте рассмотрим, какую информацию содержат файлы дампа, чем она полезна и как ее анализировать.

Итак, в файле дампа содержится полный или частичный снимок виртуальной памяти процесса. Если посмотреть в Диспетчер задач, будет видно, что все процессы используют немаленький объем оперативной памяти для решения своих задач, будь то вычисления, работа с данными, прочитанными с диска, кэши и многое другое. Все, что они хранит в виртуальной памяти, выгружается в дамп, создаваемый при аварийном завершении процессов. В этом файле можно найти много полезной информации, рассмотрим их подробнее.

Стек вызовов – это указание на место в коде, где возникла ошибка, в результате которой произошло аварийное завершение процесса. Также здесь можно просмотреть: 

  • значения локальных переменных, которые были объявлены в функциях в стеке
  • значения входных аргументов этих функций
  • указатели на возврат, то есть, куда нужно было вернуть управление после того, как функция завершит свою работу 

Загруженные модули – это компоненты, библиотеки и другие и исполняемые файлы, которые были загружены в память процесса во время выполнения программы. Например, при взаимодействии с web-сервером или с СУБД. 

Куча – здесь хранятся все объекты, для которых была выделена память. Например, это могло быть сделано функцией malloc – аллокация памяти. Это долгосрочное хранилище данных, которые не удаляются при завершении работы функции. Чтобы их удалить, нужно явно освободить память в коде приложения. 

На практике можно получить два вида дампа – полный дамп и мини-дамп.

Полный дамп содержит весь снимок виртуальной памяти процесса. То есть, размер файла дампа будет соответствовать размеру памяти, занимаемой процессом, в момент аварийного завершения этого процесса. 

Мини-дамп содержит только те данные, которые использовались в момент аварийного завершения, например, те данные в «куче», на которые ссылались переменные в стеке вызовов. При этом размер файла дампа может составлять всего несколько мегабайт. 

Как анализировать файлы дампа? 

В первую очередь, анализ начинаем с имени файла дампа. В этом имени содержится много полезной информации: имя процесса, версия платформы 1С, смещение, дата формирования, PID процесса. И для начала стоит обратить внимание на такое понятие как «смещение», которое бывает нулевым и ненулевым.

Нулевое смещение, как на примере выше, означает, что дамп сформирован не в результате аварийного завершения, и информации об исключении в нем нет. Причина его появления – система мониторинга кластера, которая признала процесс аварийным, завершила его и сняла с него дамп. По большому счету, пользы от такого дампа для наших нужд почти нет, он наиболее полезен вендору. 

Если же файл дампа имеет ненулевое смещение – это говорит об аварийной ситуации, и в этом файле уже будет содержаться стек исключения. В случае, если появление дампов с одинаковым смещением происходит с определенной периодичностью, можно предположить, что причиной является одна и та же ошибка.

Если посмотреть на пример имени файла дампа, сформированного в ОС Linux (на изображении выше), можно увидеть, что там содержится похожая информация, что и в имени файла в ОС Windows, за исключением смещения. 

В Linux дамп снимается самой операционной системой, смещение как таковое есть, но в содержимом файла. Чтобы заглянуть в содержимое файла, можно использовать различные утилиты: 

  • для ОС Windows: Windbg, Visual Studio
  • для ОС Linux: GDB, Журнал событий ОС 

Важно учитывать, что детально проанализировать содержимое файла дампа может только вендор – в данном случае фирма «1С». Именно разработчик приложения имеет в своем распоряжении исходный код программы и отладочные символы, позволяющие «перевести» содержимое дампа, например, стек, в понятные для человека имена функций и процедур.

Как анализировать файл дампа через Windbg 

В качестве примера рассмотрим анализ файла дампа в ОС Windows при помощи утилиты Windbg. При открытии дампа программа сразу предложит выполнить команду «!analyze –v», которая проанализирует содержимое файла и попытается вывести самую полезную информацию для того, чтобы понять причину возникновения этого дампа. 

На изображении ниже можно увидеть, о каких данных идет речь: 

  • Тип исключения: тип и код исключения, например, нарушение доступа (Access Violation), т.е. ошибка сегментации памяти в ОС Windows
  • Модуль и функция исключения: имя модуля (например, backend.dll) и функции, в которой произошла ошибка, послужившая причиной аварийного завершения процесса
  • Трассировка стека: список вызовов функций, ведущих к исключению
  • Идентификация процесса и потока: имя процесса и номер потока, вызвавшего исключение
  • Адрес исключения: смещение – адрес в памяти, где произошло исключение

Дополнительно в этой же утилите можно выполнить команду «lmv», которая покажет библиотеки, загруженные в процесс. Здесь же по каждой библиотеке отображается информация об авторе библиотеки и ее версии.

Важно знать, что id треда в дампе можно сопоставить с OSThread – свойством, которое есть во многих событиях ТЖ. Это иногда очень упрощает анализ – можно посмотреть по ТЖ, что делал проблемный поток. Внимание на пример ниже, где мы видим контекст исключения: сначала указан идентификатор процесса, затем – идентификатор потока, в котором оно возникло.

<pid в шестнадцатеричной системе>.<ID треда в шестнадцатеричной системе>

ID треда в десятичной системе = OSThread в технологическом журнале 1С

25:40.578000-44000,CALL,2, process=rphost,…, OSThread=2543312,…, Usr=admin, SessionID=10, Context=Система.ПолучитьФорму : ВнешняяОбработка.УронитьСервер

Также после выполнения команды «!analyze –v» в свойствах STACK_COMMAND будет отображен символ тильды («~») и номер потока, в котором возникло исключение. Выполнив еще одну команду «~*kb», можно увидеть все активные потоки внутри дампа. Для каждого из них также можно получить номер треда и сопоставить с технологическим журналом.

Итак, мы выяснили, как включать сбор файлов дампов для ОС Linux и Windows, а также обсудили, что в себе содержат файлы дампа и как анализировать эту информацию. В следующей части поговорим о rphost – важнейшем звене архитектуры платформы «1С:Предприятие 8».

Будет интересно:

Как включить сбор файлов дампа для ОС Linux и Windows  
Особенности работы информационных систем 1С под управлением Linux
Как проанализировать конфигурацию 1С на наличие платформеннозависимого кода 


Самое актуальное и интересное – у нас в telegram-канале!

Репост

Свяжитесь с нами

119435 г. Москва, ул. Малая Пироговская, 16
Контакты
Нажимая на кнопку "Связаться с нами", вы даете согласие на обработку персональных данных. Подробнее об обработке данных читайте в Политике
Связаться с нами

Заполните форму ниже и наши специалисты свяжутся с вами в ближайшее время

Удобное время для звонка
  • 10:00 - 12:00
  • 12:00 - 14:00
  • 14:00 - 16:00
  • 16:00 - 18:00
  • 18:00 - 19:00
Время московское
Отвечаем с понедельника по пятницу
Нажимая на кнопку "Связаться с нами", вы даете согласие на обработку персональных данных. Подробнее об обработке данных читайте в Политике