Анализ файлов дампа после сбора в ОС Windows и Linux

14.04.25

База данных - HighLoad оптимизация

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

В первой статье по докладу «Дамп – не приговор, а повод задуматься», с которым выступили на конференции 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 конфигурация дамп администрирование эксперт 1С:Эксперт dump

См. также

HighLoad оптимизация Программист Платформа 1С v8.3 1C:ERP Бесплатно (free)

Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.

18.02.2025    4255    ivanov660    39    

56

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    6965    ivanov660    13    

59

Администрирование СУБД Платформа 1С v8.3 1C:Бухгалтерия Россия Бесплатно (free)

При хранении файлов в томах на диске они иногда исчезают. Разбираемся, почему.

23.05.2024    13232    human_new    19    

58

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

5 стартмани

15.02.2024    14901    292    ZAOSTG    100    

121

Администрирование СУБД Системный администратор Программист Бесплатно (free)

Казалось бы, базовое знание: «индексы надо обслуживать, чтобы запросы выполнялись быстро». Но обслуживание индексов выполняется долго и может мешать работе пользователей. Кроме того, в последнее время популярны разговоры о том, что индексы можно вообще не обслуживать – насколько это оправданно? Рассмотрим: на что влияет обслуживание индексов, когда надо и когда не надо его выполнять, и если надо – как это сделать так, чтобы никому не помешать?

16.01.2024    18137    Филин    17    

53

HighLoad оптимизация Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    21749    doom2good    49    

72

HighLoad оптимизация Системный администратор Программист Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    16457    ivanov660    7    

83
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6958 14.04.25 11:36 Сейчас в теме
Всегда полезно пишите, спасибо
it-expertise; +1 Ответить
2. it-expertise 397 14.04.25 14:21 Сейчас в теме
(1) стараемся воды не наливать - чтобы всем полезно было
Спасибо!
Оставьте свое сообщение