Udostępnij za pośrednictwem


Diagnozowanie typowych błędów pakietu kodu przy użyciu usługi Service Fabric

W tym artykule opisano, co oznacza nieoczekiwane zakończenie pakietu kodu. Zapewnia wgląd w możliwe przyczyny typowych kodów błędów wraz z krokami rozwiązywania problemów.

Kiedy proces lub kontener nieoczekiwanie kończy działanie?

Gdy usługa Azure Service Fabric odbiera żądanie uruchomienia pakietu kodu, rozpoczyna przygotowywanie środowiska w systemie lokalnym zgodnie z opcjami ustawionymi w manifestach usługi App and Service. Te przygotowania mogą obejmować rezerwowanie punktów końcowych sieci lub zasobów, konfigurowanie reguł zapory lub konfigurowanie ograniczeń ładu zasobów.

Po poprawnym skonfigurowaniu środowiska usługa Service Fabric próbuje wywołać pakiet kodu. Ten krok jest uznawany za pomyślny, jeśli system operacyjny lub środowisko uruchomieniowe kontenera zgłasza pomyślne aktywowanie procesu lub kontenera. Jeśli aktywacja nie powiedzie się, w narzędziu SFX powinien zostać wyświetlony komunikat o kondycji podobny do następującego:

There was an error during CodePackage activation. Service host failed to activate. Error: 0xXXXXXXXX

Po pomyślnym aktywowaniu pakietu kodu usługa Service Fabric rozpoczyna monitorowanie jego okresu istnienia. W tym momencie proces lub kontener może zakończyć się w dowolnym momencie z wielu powodów. Na przykład może się to nie powieść, aby zainicjować bibliotekę DLL lub system operacyjny mógł zabrakło miejsca na stercie pulpitu. Jeśli pakiet kodu został zakończony, w narzędziu SFX powinien zostać wyświetlony następujący komunikat o kondycji:

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

Kod zakończenia w tym komunikacie o kondycji jest jedyną wskazówką, że proces lub kontener zawiera informacje o przyczynie jego zakończenia. Może być generowany przez dowolny poziom stosu. Na przykład ten kod zakończenia może być związany z błędem systemu operacyjnego lub problemem z platformą .NET albo został zgłoszony przez kod. Ten artykuł stanowi punkt wyjścia do diagnozowania źródła kodów zakończenia zakończenia i możliwych rozwiązań. Należy jednak pamiętać, że są to ogólne rozwiązania typowych scenariuszy i mogą nie dotyczyć wyświetlanego błędu.

Jak sprawdzić, czy usługa Service Fabric zakończyła działanie pakietu kodu?

Usługa Service Fabric może być odpowiedzialna za zakończenie pakietu kodu z różnych powodów. Może na przykład zdecydować się na umieszczenie pakietu kodu w innym węźle na potrzeby równoważenia obciążenia. Możesz sprawdzić, czy usługa Service Fabric zakończyła pakiet kodu, jeśli w poniższej tabeli widzisz którykolwiek z kodów zakończenia.

Uwaga

Jeśli proces lub kontener zakończy działanie za pomocą kodu zakończenia innego niż kody w poniższej tabeli, usługa Service Fabric nie jest odpowiedzialna za jego zakończenie.

Kod zakończenia Opis
7147 Wskazuje, że usługa Service Fabric bezpiecznie zamknęła proces lub kontener, wysyłając mu sygnał Ctrl+C.
7148 Wskazuje, że usługa Service Fabric zakończyła proces lub kontener. Czasami ten kod błędu wskazuje, że proces lub kontener nie odpowiedział w odpowiednim czasie po wysłaniu sygnału Ctrl+C i musiał zostać zakończony.

Inne typowe kody błędów i ich potencjalne poprawki

Kod zakończenia Wartość szesnastkowa Krótki opis Główna przyczyna Potencjalna poprawka
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED Ten błąd czasami oznacza, że na maszynie zabrakło miejsca na stercie pulpitu. Ta przyczyna jest szczególnie prawdopodobna, jeśli masz wiele procesów, które należą do aplikacji uruchomionej w węźle. Jeśli program nie został skompilowany w celu odpowiadania na sygnały Ctrl+C, możesz włączyć ustawienie EnableActivateNoWindow w manifeście klastra. Włączenie tego ustawienia oznacza, że pakiet kodu będzie uruchamiany bez okna graficznego interfejsu użytkownika i nie będzie odbierać sygnałów Ctrl+C. Ta akcja zmniejsza również ilość miejsca stert pulpitu używanego przez każdy proces. Jeśli pakiet kodu musi odbierać sygnały Ctrl+C, możesz zwiększyć rozmiar sterty pulpitu węzła.
3762504530 0xe0434352 Nie dotyczy Ta wartość reprezentuje kod błędu nieobsługiwanego wyjątku z kodu zarządzanego (czyli .NET). Ten kod zakończenia wskazuje, że aplikacja zgłosiła wyjątek, który pozostaje nieobsługiwany i który zakończył proces. Pierwszym krokiem podczas określania przyczyn tego błędu jest debugowanie dzienników i plików zrzutu aplikacji.

Następne kroki