共用方式為


針對未啟動的 Azure 雲端服務 (延伸支援) 角色執行個體進行疑難排解

本文討論如何針對 Azure 雲端服務 (擴充支援) 角色實例中的啟動失敗進行疑難解答。

疑難排解檢查清單

從下列選項中選擇,以診斷角色實例中發生的問題。

選項 1:關閉自訂錯誤

若要檢視完整的錯誤資訊,請開啟 Web 角色的 Web.config 檔案,將自定義錯誤模式設定為 Off,然後重新部署服務:

  1. 在 Visual Studio 中,開啟方案。

  2. 在 方案總管 中,開啟 Web.config 檔案。

  3. 在區 system.web 段中,新增下列 XML 程式代碼:

    <customErrors mode="Off" />
    
  4. 儲存檔案。

  5. 重新封裝並重新部署服務。

重新部署服務之後,您可能會收到有關服務的錯誤訊息會包含遺漏元件或 DLL 的名稱。

選項 2:使用 PowerShell 檢視角色實例狀態

若要取得角色實例運行時間狀態的相關信息,請執行 Get-AzCloudServiceRoleInstanceView Cmdlet:

$roleInstanceView = @{
    CloudServiceName = "<cloud-service-name>"
    ResourceGroupName = "<resource-group-name>"
    RoleInstanceName = "WebRole1_IN_0"
}
Get-AzCloudServiceRoleInstanceView @roleInstanceView

角色實例的狀態會列在第一個數據行中,如下列範例輸出所示:

Statuses            PlatformFaultDomain PlatformUpdateDomain
--------            ------------------- --------------------
{RoleStateStarting} 0                   0

選項 3:使用 Azure 入口網站 檢視角色實例狀態

若要檢視 Azure 入口網站 中角色實例的狀態資訊,請遵循下列步驟:

  1. Azure 入口網站 中,搜尋並選取 [雲端服務] (外延支援)。

  2. 在雲端服務清單中,選取雲端服務的名稱。

  3. 在功能表窗格中,查看 [設定] 底下,然後選取 [角色和實例]。

  4. 選取角色實例的名稱。

  5. 在 [角色實例] 窗格中,記下 [狀態 ] 字段中的角色實例狀態。

選項 4:使用遠端桌面檢視錯誤資訊

若要存取角色並檢視完整的錯誤資訊,請遵循下列步驟來使用遠端桌面通訊協定 (RDP):

  1. 新增適用於 Azure 雲端服務 的遠端桌面擴充功能(外延支援)。

  2. Azure 入口網站 中,當雲端服務實例顯示 [就緒] 狀態時,請使用遠端桌面登入雲端服務。 如需詳細資訊,請參閱 使用遠端桌面連線到角色實例。

  3. 使用您用來設定遠端桌面的認證來登入虛擬機 (VM)。

  4. 開啟 [命令提示字元] 視窗。

  5. 執行 ipconfig 命令。 複製 IPv4 位址的傳回值。

  6. 開啟網頁瀏覽器。

  7. 在網址列中,貼上 IPv4 位址,然後附加斜線和 Web 應用程式預設檔案的名稱。 例如: http://<ipv4-address>/default.aspx

如果您現在移至網站,您會看到包含詳細資訊的錯誤訊息。 以下是範例:

'/' 應用程式中的伺服器錯誤。

無法載入檔案或元件 'Microsoft.WindowsAzure.StorageClient、Version=1.1.0.0、Culture=neutral、PublicKeyToken=<16-digit-hexadecimal-string>'或其其中一個相依性。 系統找不到指定的檔案。

描述: 目前 Web 要求執行期間發生未處理的例外狀況。 請檢閱堆疊追蹤,以進一步了解錯誤以及它產生於程式碼中的何處。

例外狀況詳細數據: System.IO.FileNotFoundException

選項5:使用計算模擬器

您可以使用 Azure 計算模擬器來診斷和疑難解答遺漏相依性和 Web.config 錯誤的問題。 若要獲得最佳結果,請使用此方法來診斷問題,請使用安裝 Windows 的電腦或 VM。

若要使用 Azure 計算模擬器診斷問題:

  1. 安裝 Azure SDK

  2. 在開發計算機上,建置雲端服務專案。

  3. 在 檔案總管 的雲端服務專案中,移至 bin\debug 資料夾。

  4. .csx 資料夾和 .cscfg 檔案複製到您用來偵錯問題的計算機。

  5. 在乾淨的計算機上,開啟 [Azure SDK 命令提示字元 ] 視窗。

  6. 在命令提示字元中,執行下列 csrun 命令:

    csrun.exe /devstore:start
    
  7. 執行以下命令:

    run csrun <path-to-.csx-folder> <path-to-.cscfg-file> /launchBrowser
    

    角色啟動時,網頁瀏覽器會顯示詳細的錯誤資訊。

如果需要更多診斷,您可以使用標準 Windows 疑難解答工具。

選項 6:使用 IntelliTrace

注意

您無法在 Visual Studio 2022 中使用 IntelliTrace。 如果您使用 Visual Studio 2019、2017 或 2015,IntelliTrace 仍然可以使用。

對於使用 .NET Framework 4 的背景工作角色和 Web 角色,您可以使用 IntelliTrace。 IntelliTrace 可在 Visual Studio Enterprise 中使用。

在 IntelliTrace 開啟時部署雲端服務:

  1. 確認已安裝 Azure SDK 1.3 或更新版本。

  2. 在Visual Studio中,部署方案。 當您設定部署時,請選取 [ 啟用 .NET 4 角色 的 IntelliTrace] 複選框。

  3. 角色實例啟動之後,開啟 [伺服器總管]。

  4. 展開 [Azure\雲端服務] 節點。

  5. 若要列出角色實例,請展開部署。 然後,以滑鼠右鍵按兩下角色實例。

  6. 選取 [ 檢視 IntelliTrace 記錄]。

  7. IntelliTrace 摘要中,移至 [例外狀況數據 ],然後展開該節點。

  8. 在例外狀況清單中,尋找包含 System.IO.FileNotFoundExceptionType 資料行值的數據列。 對應的 Message 資料行值應該類似下列文字:

    無法載入檔案或元件 'Microsoft.WindowsAzure.StorageClient、Version=1.1.0.0、Culture=neutral、PublicKeyToken=<16-digit-hexadecimal-string>'或其其中一個相依性。 系統找不到指定的檔案。

原因 1:雲端服務作業因為 RoleInstanceStartupTimeoutError 而失敗

Azure 雲端服務(擴充支援)中的一或多個角色實例可能啟動速度很慢。 或者,您的角色實例可能會回收或停滯在忙碌狀態,而不會如預期般啟動。 在此情況下, RoleInstanceStartupTimeoutError 角色應用程式錯誤訊息隨即出現。

角色應用程式包含可能導致角色回收的兩個部分:

如果角色停止,平台即服務 (PaaS) 代理程式重新開機角色。

若要判斷問題是否由啟動工作所造成,請遵循下列步驟:

  1. 嘗試使用遠端桌面連線到有問題的角色實例。

  2. 線上到角色實例之後,請選取 [ 開始],然後搜尋並選取 [任務管理器]。

  3. 若要查看進程清單,請選取 [工作管理員] 中的 [詳細資料] 索引標籤。

  4. 檢查是否有 WaIISHost.exe 程式(適用於 WebRole)或 WaWorkerHost.exe (適用於 WorkerRole)。 如果這兩個處理程序都遺失,啟動工作可能會失敗。

您是否能夠確認問題是由啟動工作所造成? 如果是,您可以套用下列解決方案。 不過,只有在啟動工作是簡單或前景工作時,才能使用解決方案。 解決方案不適用於背景啟動工作。 這些工作是以非同步方式執行,並與角色的啟動工作平行進行。

解決方案:偵錯啟動工作指令碼

若要針對啟動工作失敗進行疑難排解,請對 VM 啟動期間執行的指令碼進行偵錯。 此啟動工作指令碼是 Startup.cmd 檔案。 若要協助調查指令碼中的問題,您可以從下列選項中選擇:

  • 檢視 C:\Resources\WaHostBootstrapper.log 記錄檔。 此檔案是WaHostBootstrapper.exe程序的記錄檔。 此處理程序負責啟動工作。 在 Windows Azure 傳統 VM 架構的工作流程中有對此的說明。 然後,搜尋任何涉及執行 Startup.cmd的錯誤或例外狀況。 請特別確認結束代碼是否為 0。 如果不是,啟動工作已完成,但發生錯誤。 如果沒有與指令碼結束代碼相關的記錄,則啟動工作仍在執行中。

  • 如果因為預期的商務影響而無法在生產環境中自由執行啟動工作指令碼,請在命令列自訂記錄機制。 例如,您可以將指令碼命令中的重要資訊輸出重新導向至檔案。 若要這樣做,其中一個方法是將 附加 > "%TEMP%\StartupLog.txt" 至命令的結尾。

  • 在命令列,手動執行啟動工作指令碼。 下表顯示 WebRole 或 WorkerRole 角色的這個腳本位置。

    角色 指令碼位置
    WebRole E:\approot\bin\Startup.cmd
    WorkerRole E:\approot\Startup.cmd

原因 2:DLL 或元件遺失

在狀態之間迴圈的無回應角色實例和角色實例可能是因為缺少 DLL 或元件所造成。

以下是缺少 DLL 或元件的一些徵兆:

  • 您的角色實例會迴圈執行 初始化忙碌停止 狀態。

  • 您的角色實例已移至 [就緒 ] 狀態,但 Web 應用程式中看不到頁面。

如果網站部署在 Web 角色中,但缺少 DLL,它可能會顯示下列伺服器運行時間錯誤訊息。

'/' 應用程式中的伺服器錯誤。

運行時錯誤

描述: 伺服器上發生應用程式錯誤。 此應用程式的目前自定義錯誤設定可防止從遠端檢視應用程式錯誤的詳細資料(基於安全性原因)。 不過,它可以由在本機伺服器計算機上執行的瀏覽器檢視。

詳細數據:若要啟用遠端電腦上可檢視此特定錯誤訊息的詳細數據,請使用位於目前 Web 應用程式的根目錄中的 「web.config」 組態檔建立<customErrors>標籤。 此 <customErrors> 標籤應該會將其 「mode屬性設定為」Off

解決方案:解決遺漏的 DLL 和元件

若要解決遺漏 DLL 和元件的錯誤:

  1. 在 Visual Studio 中,開啟方案。

  2. 在 方案總管 中,開啟 [參考] 資料夾。

  3. 選取錯誤訊息中所識別的元件。

  4. [屬性] 中,將 [ 複製本機 ] 屬性設定為 True

  5. 重新部署雲端服務。

確認錯誤不再出現之後,請重新部署服務。 當您設定部署時,請勿選取 [ 啟用 .NET 4 角色 的 IntelliTrace] 複選框。

下一步

  • 瞭解如何使用 Azure PaaS 計算機診斷數據針對雲端服務角色問題進行疑難解答。

其他相關資訊

如需傳統雲端服務中初始設定、執行和啟動工作範例的相關信息,請參閱下列文章:

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。