Диагностика распространенных ошибок пакета кода с помощью Service Fabric
В этой статье объясняется, что означает неожиданное завершение работы пакета кода. Она содержит сведения о возможных причинах распространенных ошибок, а также действия по устранению неполадок.
Когда процесс или контейнер неожиданно прекращает работу?
Когда служба Azure Service Fabric получает запрос на запуск пакета кода, она начинает подготовку среды в локальной системе в соответствии с параметрами, заданными в манифестах приложения и службы. Эти подготовительные действия могут включать резервирование сетевых конечных точек или ресурсов, настройку правил брандмауэра или настройку ограничений управления ресурсами.
После надлежащей настройки среды Service Fabric пытается запустить пакет кода. Этот шаг считается успешным, если ОС или среда выполнения контейнера сообщает, что процесс или контейнер был успешно активирован. Если выполнить активацию не удается, вы увидите примерно следующее сообщение о состоянии работоспособности в SFX:
There was an error during CodePackage activation. Service host failed to activate. Error: 0xXXXXXXXX
После успешной активации пакета кода Service Fabric начинает отслеживать время его существования. На этом этапе процесс или контейнер могут завершить работу в любое время по ряду причин. Например, может произойти сбой инициализации DLL-библиотеки или в операционной системе не хватит места для кучи рабочего стола. Если пакет кода завершит работу, вы увидите следующее сообщение о состоянии работоспособности в SFX:
The process/container terminated with exit code: XXXXXXXX. Please look at your application logs/dump or debug your code package for more details. For information about common termination errors, please visit https://aka.ms/service-fabric-termination-errors
Код выхода в этом сообщении является единственным источником сведений о причине завершения работы процесса или контейнера. Он может быть создан на любом уровне стека. Например, этот код выхода может быть связан с ошибкой ОС или с проблемой .NET либо установлен вашим собственным программным кодом. Используйте эту статью в качестве отправной точки для диагностики источника кодов завершения и поиска возможных решений. Однако помните, что это общие решения для распространенных сценариев, которые могут не относиться к наблюдаемой вами ошибке.
Как узнать, завершила ли служба Service Fabric работу пакета кода?
Service Fabric может завершить работу пакета кода по разным причинам. Например, пакет может потребоваться разместить на другом узле для балансировки нагрузки. Убедиться, что служба Service Fabric завершила работу пакета кода, можно по кодам завершения, перечисленным в таблице ниже.
Примечание.
Если процесс или контейнер завершает работу с кодом, отличным от значений в этой таблице, завершение не было инициировано Service Fabric.
Код выхода | Description |
---|---|
7147 | Указывает, что служба Service Fabric корректно завершила работу процесса или контейнера, отправив ему сигнал CTRL + C. |
7148 | Указывает, что служба Service Fabric завершила работу процесса или контейнера. Иногда этот код ошибки означает, что процесс или контейнер не ответил своевременно на сигнал CTRL + C и его работу пришлось прерывать. |
Другие распространенные коды ошибок и варианты их исправления
Код выхода | Шестнадцатеричное значение | Краткое описание | Основная причина | Возможное исправление |
---|---|---|---|---|
3221225794 | 0xc0000142 | STATUS_DLL_INIT_FAILED | Эта ошибка иногда означает, что на компьютере закончилось место в куче для рабочего стола. Этот вариант особенно вероятен, если приложению, которое запущено на узле, принадлежит множество процессов. | Если программа не умеет реагировать на сигналы CTRL + C, можно включить параметр EnableActivateNoWindow в манифесте кластера. В результате пакет кода будет выполняться без окна графического пользовательского интерфейса и не будет принимать сигналы CTRL + C. Это действие также уменьшает место в куче рабочего стола, занимаемое каждым процессом. Если пакет кода должен получать сигналы CTRL + C, размер кучи рабочего стола для узла можно увеличить. |
3762504530 | 0xe0434352 | Н/П | Это значение представляет собой код ошибки необработанного исключения из управляемого кода (т. е. .NET). | Этот код обозначает, что приложение вызвало исключение, которое осталось необработанным и завершило процесс. Первым шагом для определения источника этой ошибки является отладка журналов и файлов дампа приложения. |
Следующие шаги
- Узнайте больше о диагностике в других распространенных сценариях.
- Ознакомьтесь с подробными сведениями о журналах Azure Monitor и их возможностях в обзоре Azure Monitor.
- Узнайте больше об оповещениях Azure Monitor, которые помогают в обнаружении и диагностике.
- Ознакомьтесь с функциями поиска по журналам и запросов к журналам, которые являются частью журналов Azure Monitor.