分享方式:


Azure 中 Web Apps 的應用程式效能常見問題

注意事項

下列某些指導方針可能僅適用於 Windows 或 Linux 應用程式服務。 例如,Linux 應用程式服務預設會以64位模式執行。

本文提供常見問題的解答, (常見問題) 有關 Azure App 服務 Web Apps 功能的應用程式效能問題。

如果本文未解決您的 Azure 問題,請造訪 MSDN 和 Stack Overflow 上的 Azure 論壇。 您可以在這些論壇張貼您的問題,或張貼到 Twitter 上的@AzureSupport。 您也可以提交 Azure 支援 要求。 若要提交支援要求,請在 [Azure 支援] 頁面上,選取 [取得支援]

為什麼即使所有 Web Apps 都停止,我的 App Service 方案仍會顯示CPU/記憶體使用量?

Azure App 服務 需要處理數個平臺作業和功能的連續系統程式,例如安全性更新、SCM 控制台的可用性、應用程式監視、驗證,以及 Web 應用程式的許多其他重要功能。

即使沒有執行 Web Apps,或 App Service 方案不包含任何 Web Apps,系統進程仍會在 App Service 方案上執行。

平臺程式會 (取最少量的資源,例如 CPU、記憶體和磁碟空間) ,而且在 App Service 方案的容量規劃、監視和自動調整觸發程式設定期間,應該考慮相同的資源量。

為什麼我的應用程式速度很慢?

多個因素可能會導致應用程式效能變慢。 如需詳細的疑難解答步驟,請參閱 針對緩慢的 Web 應用程式效能進行疑難解答

如何? 針對高CPU耗用量案例進行疑難解答嗎?

在某些高 CPU 耗用量案例中,您的應用程式可能真的需要更多運算資源。 在此情況下,請考慮調整為較高的服務層級,讓應用程式取得所需的所有資源。 其他時候,高 CPU 耗用量可能是因為迴圈錯誤或程式代碼撰寫做法所造成。 深入瞭解觸發 CPU 耗用量增加的因素是兩部分的程式。 首先,建立進程傾印,然後分析進程傾印。 如需詳細資訊,請參閱擷取和分析傾印檔案,以取得 Web Apps 的高 CPU 耗用量

如何? 針對高記憶體耗用量案例進行疑難解答嗎?

在某些高記憶體耗用量案例中,您的應用程式可能真的需要更多運算資源。 在此情況下,請考慮調整為較高的服務層級,讓應用程式取得所需的所有資源。 其他時候,程式代碼中的錯誤可能會導致記憶體流失。 撰寫程式代碼的做法也可能會增加記憶體耗用量。 取得觸發高記憶體耗用量之內容的深入解析是兩部分的程式。 首先,建立進程傾印,然後分析進程傾印。 來自 Azure 網站延伸模組庫的損毀診斷程式可以有效率地執行這兩個步驟。 如需詳細資訊,請參閱擷取和分析傾印檔案,以取得 Web Apps的間歇性高記憶體

如何? 使用 PowerShell 將 App Service Web 應用程式自動化?

您可以使用 PowerShell Cmdlet 來管理和維護 App Service Web 應用程式。 在我們的部落格文章中,我們會使用PowerShell將裝載於 Azure App 服務中的Web應用程式自動化,說明如何使用 Azure Resource Manager 型 PowerShell Cmdlet 將一般工作自動化。 部落格文章也有各種 Web 應用程式管理工作的範例程式代碼。 如需所有 App Service Web 應用程式 Cmdlet 的描述和語法,請參閱 Az.Websites

如何? 檢視 Web 應用程式的事件記錄檔嗎?

若要檢視 Web 應用程式的事件記錄檔:

  1. 登入 Kudu 網站 (https://*yourwebsitename*.scm.azurewebsites.net) 。
  2. 在功能表中,選取 [ 偵錯控制台>CMD]
  3. 選取 LogFiles 檔 夾。
  4. 若要檢視事件記錄檔,請選取 eventlog.xml旁的 鉛筆圖示。
  5. 若要下載記錄,請執行 PowerShell Cmdlet Save-AzureWebSiteLog -Name webappname

如何? 擷取 Web 應用程式的使用者模式記憶體轉儲嗎?

若要擷取 Web 應用程式的使用者模式記憶體轉儲:

  1. 登入 Kudu 網站 (https://*yourwebsitename*.scm.azurewebsites.net) 。
  2. 選取 [ 行程總管] 功能表。
  3. 以滑鼠右鍵按兩下 w3wp.exe 行程或 WebJob 程式。
  4. 取 [下載記憶體轉儲>完整傾印]

如何? 檢視 Web 應用程式的程式層級資訊嗎?

您有兩個選項可檢視 Web 應用程式的程式層級資訊:

  • 在 Azure 入口網站:
    1. 開啟 Web 應用程式的 進程總管
    2. 若要查看詳細數據,請選 取w3wp.exe 程式。
  • 在 Kudu 控制台中:
    1. 登入 Kudu 網站 (https://*yourwebsitename*.scm.azurewebsites.net) 。
    2. 選取 [ 行程總管] 功能表。
    3. 針對 w3wp.exe 程式,選取 [ 屬性]

當我流覽至我的應用程式時,我看到「錯誤 403 - 此 Web 應用程式已停止」。如何? 解決此問題嗎?

三種情況可能會導致此錯誤:

  • Web 應用程式已達到計費限制,且您的網站已停用。
  • Web 應用程式已在入口網站中停止。
  • Web 應用程式已達到可能套用至免費或共用規模服務方案的資源配額限制。

若要查看造成錯誤的原因並解決問題,請遵循 Web Apps 中的步驟:「錯誤 403 – 此 Web 應用程式已停止」

哪裡可以深入瞭解各種 App Service 方案的配額和限制?

如需配額和限制的相關信息,請參閱 App Service 限制。

如何? 在空閒時間之後減少第一個要求的回應時間嗎?

根據預設,如果 Web 應用程式閒置一段時間,就會卸除它們。 如此一來,系統就可以節省資源。 缺點是卸除 Web 應用程式之後,第一個要求的回應會更長,以允許 Web 應用程式載入並開始提供回應。 在 [基本] 和 [標準] 服務方案中,您可以開啟 [Always On] 設定,讓應用程式一律載入。 這可消除應用程式閑置後較長的載入時間。 若要變更 Always On 設定:

  1. 在 Azure 入口網站 中,移至您的 Web 應用程式。
  2. 取組態
  3. 選取 [一般設定]
  4. 針對 [Always On],選取 [開啟]

如何? 開啟失敗的要求追蹤?

若要開啟失敗的要求追蹤,請遵循下列步驟:

  1. 在 Azure 入口網站 中,移至您的 Web 應用程式。

  2. 取 [所有設定>診斷記錄]

  3. 針對 [失敗的要求追蹤],選取 [ 開啟]

  4. 選取 [儲存]

  5. 在 [Web 應用程式] 刀鋒視窗上,選取 [ 工具]

  6. 取 [Visual Studio Online]

  7. 如果設定不是 [開啟],請選取 [ 開啟]

  8. 選取「移至」

  9. 取Web.config

  10. 在 system.webServer 中,新增下列組態 (以擷取特定 URL) :

    <system.webServer>
    <tracing> <traceFailedRequests>
    <remove path="*api*" />
    <add path="*api*">
    <traceAreas>
    <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression, Cache,RequestNotifications,Module,FastCGI" verbosity="Verbose" />
    </traceAreas>
    <failureDefinitions statusCodes="200-999" />
    </add> </traceFailedRequests>
    </tracing>
    
  11. 若要針對效能緩慢問題進行疑難解答,請在擷取要求花費超過 30 秒) 時新增此設定 (:

    <system.webServer>
    <tracing> <traceFailedRequests>
    <remove path="*" />
    <add path="*">
    <traceAreas> <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression, Cache,RequestNotifications,Module,FastCGI" verbosity="Verbose" />
    </traceAreas>
    <failureDefinitions timeTaken="00:00:30" statusCodes="200-999" />
    </add> </traceFailedRequests>
    </tracing>
    
  12. 若要下載失敗的要求追蹤,請在 入口網站中移至您的網站。

  13. 取 [工具>Kudu>Go]

  14. 在功能表中,選取 [ 偵錯控制台>CMD]

  15. 選取 LogFiles 資料夾,然後選取名稱開頭為 W3SVC 的資料夾。

  16. 若要查看 XML 檔案,請選取鉛筆圖示。

我看到「背景工作進程因「記憶體百分比」限制而要求回收」訊息。如何? 解決此問題?

即使是在64位操作系統) 上,32位進程 (的可用記憶體數量上限也是2 GB。 根據預設,背景工作進程會在 App Service (中設定為 32 位,以便與舊版 Web 應用程式) 相容。

請考慮切換至 64 位進程,以便利用 Web 背景工作角色中可用的額外記憶體。 此動作會觸發 Web 應用程式重新啟動,因此請據以排程。

另請注意,64 位環境需要基本或標準服務方案。 免費和共用方案一律會在32位環境中執行。

如需詳細資訊,請參閱在 App Service 中設定 Web 應用程式

為什麼我的要求會在 230 秒後逾時?

Azure Load Balancer的預設閑置逾時設定為四分鐘。 此設定通常是 Web 要求的合理回應時間限制。 因此,如果您的應用程式未在大約 240 秒內傳回回應, (Windows app 上的 230 秒,App Service 傳回逾時給用戶端,在 Linux 應用程式上傳回 240 秒) 。 如果您的 Web 應用程式需要背景處理,建議您使用 Azure WebJobs。 Azure Web 應用程式可以呼叫 WebJobs,並在背景處理完成時收到通知。 您可以從多個使用 WebJobs 的方法中選擇,包括佇列和觸發程式。

WebJobs 是專為背景處理所設計。 您可以在 WebJob 中執行所需的背景處理。 如需 WebJobs 的詳細資訊,請 參閱使用 WebJobs 執行背景工作

ASP.NET Core裝載於 App Service 的應用程式有時會停止回應。 如何? 修正此問題嗎?

舊版 Kestrel 的已知問題可能會導致裝載於 App Service 中的 ASP.NET Core 1.0 應用程式間歇性停止回應。 您也可能會看到此訊息:「指定的 CGI 應用程式發生錯誤,而伺服器已終止進程。」

Kestrel 1.0.2 版已修正此問題。 此版本包含在 ASP.NET Core 1.0.3 更新中。 若要解決此問題,請確定您已將應用程式相依性更新為使用Kestrel 1.0.2。 或者,您可以使用部落格文章中所述的兩個因應措施之一,ASP.NET Core App Service Web 應用程式中的 1.0 緩慢效能問題

我在 Web 應用程式的檔案結構中找不到我的記錄檔。 如何找到它們?

如果您使用 App Service 的本機快取功能,則 App Service 實例的 LogFiles 和 Data 資料夾資料夾結構會受到影響。 使用本機快取時,會在記憶體 LogFiles 和 Data 資料夾中建立子資料夾。 子資料夾會使用命名模式「唯一標識碼」+ 時間戳。 每個子資料夾都會對應至 Web 應用程式正在執行或已執行的 VM 實例。

若要判斷您是否使用本機快取,請檢查您的 [App Service 應用程式設定] 索引卷標。如果使用本機快取,應用程式設定會WEBSITE_LOCAL_CACHE_OPTION設定為 Always

如果您未使用本機快取,而且遇到此問題,請提交支援要求。

我看到訊息「嘗試以其訪問許可權禁止的方式存取套接字」。如何? 解決此錯誤嗎?

如果 VM 實例上的輸出 TCP 連線已用盡,通常會發生此錯誤。 在 App Service 中,會針對每個 VM 實例可建立的輸出連線數目上限強制執行限制。 如需詳細資訊,請參閱 跨 VM 數值限制

如果您嘗試從應用程式存取本機位址,也可能會發生此錯誤。 如需詳細資訊,請參閱 本機位址要求

如需 Web 應用程式中輸出連線的詳細資訊,請參閱關於 Azure 網站連出連線的部落格文章。

如何? 使用 Visual Studio 對我的 App Service Web 應用程式進行遠端偵錯嗎?

如需示範如何使用 Visual Studio 對 Web 應用程式進行偵錯的詳細逐步解說,請參閱遠端偵錯您的 App Service Web 應用程式

與我們連絡,以取得說明

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