診斷使用 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) 中未處理例外狀況的錯誤碼。 | 此結束代碼表示您的應用程式已引發例外狀況,且該例外狀況會維持未處理狀態,因而終止處理序。 判斷觸發此錯誤的第一步,即是將應用程式的記錄和傾印檔案進行偵錯。 |
下一步
- 深入了解如何診斷其他常見案例。
- 閱讀 Azure 監視器概觀,深入了解 Azure 監視器記錄及其功能。
- 深入了解 Azure 監視器記錄警示,以協助偵測和診斷。
- 認識 Azure 監視器記錄中提供的記錄搜尋和查詢功能。