Ошибка загрузки компоненты frame

  • автор:

Добрый день! Уважаемые читайте и гости популярного IT блога Pyatilistnik.org. В прошлый раз мы с вами изучили вопрос, где в вашей системе располагаются ваши сертификаты пользователя и компьютера. Двигаемся далее и на повестке для у меня возникла проблема, которую я буду решать и вести в данной статье лог действий помогающих достижению цели. Сегодня я разберу ошибку при работе программы 1С предприятие, а именно она вылетает с событием «Программа 1cv8c.exe версии 8.3.14.1630 прекратила взаимодействие с Windows и была закрыта.» или «Имя сбойного приложения: 1cv8c.exe, версия: 8.3.14.1630, метка времени: 0x5c6e4c97». Надеюсь, что вместе с вами мы решим данную проблему.

Описание проблемы

Есть RDS ферма в режиме HA, построенная на базе серверов Windows Server 2012 R2. В совершенно разное время появляются жалобы, что пользователь не может корректно выйти из системы(/na-terminalnom-servere-visit-vyhod-iz-sistemy/), ряд мер я описывал по данному вопросу, но они к сожалению срабатывают не всегда. В такой ситуации пока алгоритм был такой, пользователям отправлялось уведомление на терминальный стол, после чего шла перезагрузка. Просматривая логи событий, во всех случаях присутствовали одни и те же ошибки, и все они указывали на какой-то косяк со стороны 1С 8.3.14.1630. Вот вам примеры текущих ошибок:

События с кодом ID 1000 журнал Application Error: Имя сбойного приложения: 1cv8c.exe, версия: 8.3.14.1630, метка времени: 0x5c6e4c97
Имя сбойного модуля: wbase83.dll, версия: 8.3.14.1630, метка времени: 0x5c6e4bb7
Код исключения: 0xc0000005
Смещение ошибки: 0x00006895
Идентификатор сбойного процесса: 0x266c
Время запуска сбойного приложения: 0x01d547768b10a80e
Путь сбойного приложения: C:\Program Files (x86)\1cv8\8.3.14.1630\bin\1cv8c.exe
Путь сбойного модуля: C:\Program Files (x86)\1cv8\8.3.14.1630\bin\wbase83.dll
Идентификатор отчета: 3c6e27af-b37a-11e9-815f-0050568dcf1e
Полное имя сбойного пакета:
Код приложения, связанного со сбойным пакетом:

События с кодом ID 1000 журнал Application Error: Имя сбойного приложения: EXCEL.EXE, версия: 16.0.4873.1000, метка времени: 0x5cffdabb
Имя сбойного модуля: EXCEL.EXE, версия: 16.0.4873.1000, метка времени: 0x5cffdabb
Код исключения: 0xc0000005
Смещение ошибки: 0x0002b78b
Идентификатор сбойного процесса: 0x2d80
Время запуска сбойного приложения: 0x01d546ec7c1c1a1f
Путь сбойного приложения: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
Путь сбойного модуля: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
Идентификатор отчета: bc1811e7-b2df-11e9-815f-0050568dcf1e
Полное имя сбойного пакета:

События с кодом ID 1000 журнал Application Error: Имя сбойного приложения: 1cv8.exe, версия: 8.3.14.1630, метка времени: 0x5c6e4d23
Имя сбойного модуля: rtrsrvc.dll, версия: 8.3.14.1630, метка времени: 0x5c6e4d21
Код исключения: 0xc0000005
Смещение ошибки: 0x00031042
Идентификатор сбойного процесса: 0xb37c
Время запуска сбойного приложения: 0x01d5388ac2b67852
Путь сбойного приложения: C:\Program Files (x86)\1cv8\8.3.14.1630\bin\1cv8.exe

Путь сбойного модуля: C:\Program Files (x86)\1cv8\8.3.14.1630\bin\rtrsrvc.dll
Идентификатор отчета: 87f52a22-a4da-11e9-815c-0050568dcf1e
Полное имя сбойного пакета:
Код приложения, связанного со сбойным пакетом:

События с кодом ID 1000 журнал Application Error: Имя сбойного приложения: mstsc.exe, версия: 6.3.9600.18980, метка времени: 0x5ab67164
Имя сбойного модуля: ntdll.dll, версия: 6.3.9600.19304, метка времени: 0x5c7f684f
Код исключения: 0xc0000374
Смещение ошибки: 0x00000000000f1cd0
Идентификатор сбойного процесса: 0x49f0
Время запуска сбойного приложения: 0x01d5387f8ab96e71
Путь сбойного приложения: C:\Windows\system32\mstsc.exe
Путь сбойного модуля: C:\Windows\SYSTEM32\ntdll.dll
Идентификатор отчета: d802c5d7-a472-11e9-815c-0050568dcf1e

События с кодом ID 1002 журнал Application Error: Программа 1cv8c.exe версии 8.3.14.1630 прекратила взаимодействие с Windows и была закрыта. Чтобы узнать, имеются ли дополнительные сведения о проблеме, проверьте историю проблемы в Центре поддержки в панели управления.
ИД процесса: 6394
Время запуска: 01d5476cf0acb640
Время завершения: 1
Путь приложения: C:\Program Files (x86)\1cv8\8.3.14.1630\bin\1cv8c.exe
ИД отчета: bbd779d9-b360-11e9-80e8-0050568dbadb

Видно, что из-за этой ошибки 1С так же повис проводник Windows:

События с кодом ID 1002 журнал Application Error: Программа Explorer.EXE версии 6.3.9600.18231 прекратила взаимодействие с Windows и была закрыта. Чтобы узнать, имеются ли дополнительные сведения о проблеме, проверьте историю проблемы в Центре поддержки в панели управления.
ИД процесса: b450
Время запуска: 01d54769b60320f4
Время завершения: 60000
Путь приложения: C:\Windows\Explorer.EXE
ИД отчета: 1b4bb96b-b360-11e9-80e8-0050568dbadb
Полное имя сбойного пакета:
Код приложения, связанного со сбойным пакетом:

Алгоритм поиска проблемы

Сразу скажу, что внятного ответа ни разработчики 1С ни техническая поддержка мне дали, все сказали, что у вас проблема с системой. И так, что я делал при поиске проблемы:

1. Вводил абсолютно свежий сервер с установленным Windows Server 2012 R2, эффекта не дало, ошибка все так же появилась
2. Удалил все неиспользуемые версии 1С, остались на текущий момент
3. Пробовал удалять кэш 1С, эффекта не дало
4. Переустановка самого клиента 1С, эффекта нет

Далее я решил попробовать собрать трассировку работы приложения по определенным провайдерам Winows и 1С, я такое делал уже при проблеме временного профиля на терминальных серверах. Для этих целей я использовал утилиту logman.exe.

Утилита Logman.exe

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

ссылка на описание утилиты Logman.exe на Microsoft https://docs.microsoft.com/ru-ru/windows-server/administration/windows-commands/logman

Когда вы захватываете через утилиту Logman.exe трассировку событий, то создается очень объемный лог, и если вы его не ограничите, то он забьет ваш диск за час. Для того, чтобы его слегка минимизировать мы может явным образом указать какие именно провайдеры Windows вы должны захватывать, как их определить я покажу чуть ниже. Откройте командную строку, лучше в режиме администратора, чтобы всякие UAC вам не мешали. Далее посмотрим всех доступных поставщиков, если не будет влезать на экран, то можете воспользоваться ключом | more или запустить все в PowerShell.

logman query providers

Как видим их приличное количество, но нам бы хотелось анализировать только те, что относятся к 1С. Чтобы отфильтровать, поставщиков Windows, вы можете использовать PID процесса. В диспетчере задач найдите нужный вас процесс, предположим в моем примере это ID 42424

В командной строке пишем:

logman query providers -pid 42424

На выходе вы получите уже меньшее количество поставщиков Windows, у меня это получилось вот так для 1С 8.3.14.1630. Тут нас будут интересовать исключительно GUID.

Вам необходимо в текстовый файл сохранить именно GUID значения, по одному значению в строке. Далее этот файл нам будет нужен, при мониторинге. Создайте у себя для удобства отдельную папку. в которую сохраните файл со списком GUID. у меня это будет путь C:\tmp\provaders8.txt. Далее вам нужно определиться сколько вы готовы отдать под файл лога, учтите что он заполняется молниеносно, и сохраняется в сжатом виде в формате .etl, но если вы его потом распакуете, то например 50 МБ превратятся в 750, это нужно учитывать, но есть и обратная сторона нужно больше данных для диагностики, поэтом маленьким его делать так же нет смысла. Я в своем поиске сделаю его 3 ГБ.

В командной строке создаем новую трассировку в Logman.exe:

logman create trace -n 1C8 -f bincirc -max 3000 -ow -o C:\tmp\1C8.etl -ets

  • -n задает имя вашей трассировки приложения
  • -max — задает максимальный размер файла
  • -ow — перезаписать текущий файл если он существует
  • -o — путь до файла .etl
  • -ets — Отправить команды сеансам трассировки событий напрямую, без сохранения или планирования.
  • f bincirc — включить цикл перезаписывания файла новыми данными

Далее нам необходимо обновить наше задание и сказать, что собирать данные нужно по определенным провайдер, которые находятся у нас в файле:

logman update 1C8 -pf C:\tmp\provaders8.txt -ets

  • -pf — указать путь до файла с GUID

В итоге у вас начинается наполнение файла .etl

Посмотреть статус и список работающих провайдеров вы можете командой:

logman query -ets

Я вижу, что мой сеанс отслеживания событий под именем 1С8 работает. Кстати если вы откроете оснастку «Управление компьютером» и перейдете в раздел «Производительность — Группы сборщиков данных — Сеансы отслеживания событий», то вы увидите тот же список заданий. Тут проще будет потом вносить изменения, например по ключевым словам или уровнем событий, так как по умолчанию у меня стоит уровень 0, подразумевающий собирать все.

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

или же командой:

logman stop -n 1C8 -ets

Далее нам необходим из данного архива получить дамп приложения и его лог, для анализа. Сделать, это можно командой:

Tracerpt C:\tmp\1C8.etl

Напоминаю, что у вам потребуется много места. Все начинается распаковка лога, вы будите видеть таскбар. В итоге из своих 3 ШБ, я получил файл дамп (dumpfile.xml) приложения 1С Предприятие в размере 41 ГБ и текстовый файл summary.txt

Получив такой огромный лог, я не смог его прочитать, утилита Microsoft Message Analyzer писала, что недостаточно памяти для продолжения выполнения программы. Пришлось уменьшать размер epl файла до 100 МБ и собирать меньшее количество провайдеров, исключив некоторые Microsoft и фиксировать только ошибки, уровня 2.

  • Critical — 1 0x1 Этот уровень соответствует критической ошибке, которая является серьезной ошибкой, вызвавшей серьезный сбой.
  • Error — 2 0x2 Этот уровень добавляет стандартные ошибки, которые указывают на проблему.
  • Informational — 4 0x4 Этот уровень добавляет информационные события или сообщения, которые не являются ошибками. Эти события могут помочь отследить прогресс или состояние приложения.
  • LogAlways — 0 0xffffffff Фильтрация уровней по событию не выполняется
  • Verbose — 5 0x5 Этот уровень добавляет длинные события или сообщения. Это вызывает все события, которые будут зарегистрированы.
  • Warning — 3 0x3 Этот уровень добавляет предупреждающие события (например, события, которые публикуются, потому что диск почти заполнен).

Так же я параллельно создал ключи реестра, которые при сбое определенного приложения будут записывать его дамп.

В итоге я получил небольшого вида файлы, которые чуть больше смогли ответить, в чем проблема связанная с появлением ошибки с ID 1000.

Откройте DebugDiag Analysis, выберите пункты:

  • crashHangAnalysis
  • MemoryAnalysis
  • KernelCrashHangAnalysys

После чего нажимаем кнопку «Add data Files».

После чего нажмите «Start Analysis»

На выходе вы получаете веб отчет, у меня выглядело вот так:

WARNING — DebugDiag was not able to locate debug symbols for \wbase83.dll, so the information below may be incomplete.

Далее хотя бы видно, к какой базе данных было подключение, для этого есть ключ /IBName.

Далее вы увидите более детальную отладочную информацию по Thread — System ID, она может быть полезна для разработчиков 1С.

Thread 6 — System ID 118516

This thread is not fully resolved and may or may not be a problem. Further analysis of these threads may be required.

Thread 0 — System ID 118120

Thread 3 — System ID 118148

На этом моя борьба с зависание терминального сервера из-за ошибки 1С предприятия закончена, я как администратор тут уже ничего не могу поделать, надеюсь на разработчиков. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *