共用方式為


診斷使用 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 已終止您的程式碼封裝。

注意

若您的處理序或容器已終止,但顯示下表以外的結束代碼,終止責任便不在 Service Fabric。

結束代碼 描述
7147 表示 Service Fabric 會傳送 Ctrl + C 訊號,並以正常方式關閉處理序或容器。
7148 表示 Service Fabric 已終止處理序或容器。 有時此錯誤碼則表示,傳送 Ctrl + C 訊號後,該處理序或容器未及時回應且須終止。

其他常見錯誤碼及可能的修正方式

結束代碼 十六進位值 簡短描述 根本原因 可能的修正
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED 此錯誤有時表示該電腦已用盡桌面的堆積空間。 若您的應用程式有眾多處理序在該節點上執行,則特別可能發生此情況。 若您的程式並非專用於回應 Ctrl + C 訊號,則可啟用叢集資訊清單中的 EnableActivateNoWindow 設定。 啟用此設定即表示,您的程式碼封裝將會在無 GUI 視窗情況下執行,且不會收到 Ctrl + C 訊號。 此動作也可減少各處理序耗用的桌面堆積空間量。 若您的程式碼封裝需要接收 Ctrl + C 訊號,則可增加節點的桌面堆積大小。
3762504530 0xe0434352 N/A 此值代表受控碼 (意即 .NET) 中未處理例外狀況的錯誤碼。 此結束代碼表示您的應用程式已引發例外狀況,且該例外狀況會維持未處理狀態,因而終止處理序。 判斷觸發此錯誤的第一步,即是將應用程式的記錄和傾印檔案進行偵錯。

下一步