Анализ файлов дампа после сбора в ОС 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С:Предприятие 8 1C:ERP Бесплатно (free)

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

18.02.2025    8901    ivanov660    39    

61

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

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

24.06.2024    11343    ivanov660    13    

64

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

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

23.05.2024    18147    human_new    22    

60

HighLoad оптимизация Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    8655    spyke    29    

54

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист 1С 8.3 Абонемент ($m)

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

5 стартмани

15.02.2024    20479    359    ZAOSTG    106    

125

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

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

16.01.2024    27976    Филин    17    

59
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 7434 14.04.25 11:36 Сейчас в теме
Всегда полезно пишите, спасибо
it-expertise; +1 Ответить
2. it-expertise 450 14.04.25 14:21 Сейчас в теме
(1) стараемся воды не наливать - чтобы всем полезно было
Спасибо!
3. kuzyara 2232 29.04.25 08:39 Сейчас в теме
Как проанализировать дамп, чтобы найти виновника распухающей памяти рпхоста?
it-expertise; +1 Ответить
4. makaron24 30.04.25 07:13 Сейчас в теме
В дампе можно посмотреть исходный код исполняемых модулей?
5. bugagashenka 205 28.05.25 08:15 Сейчас в теме
Спасибо большое за статью!
Не могли бы вы подсказать, смотрю последний пример, в нем (11948.2080), в ТЖ OSThread=2543312
и понять не могу, как из 2080 получить 2543312
2543312(dec) = 26CED0(hex) но на картинке и близко нет этого значения.
it-expertise; +1 Ответить
6. bugagashenka 205 28.05.25 10:40 Сейчас в теме
(5) Попробовал на своем дампе и разобрался
7. it-expertise 450 03.06.25 10:28 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация