Azure Web 應用程式的應用程式效能常見問題集
注意
下列某些指導方針可能只能在 Windows 或 Linux App Services 上運作。 例如,Linux App Services 預設會以64位模式執行。
本文針對 Azure App 服務 Web Apps 功能的應用程式效能問題,提供常見問題(常見問題)的解答。
若本文中未提及您的 Azure 問題,請前往 MSDN 及 Stack Overflow 上的 Azure 論壇。 您可以在這些論壇中張貼您的問題,或將問題貼到 Twitter 上的 @AzureSupport。 您也可以提交 Azure 支援要求。 若要提交支援要求,請在 Azure 支援頁面上,選取 [取得支援]。
為什麼即使所有 Web 應用程式都停止,我的 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耗用量。
如何? 針對高記憶體耗用量案例進行疑難解答?
在某些高記憶體耗用量案例中,您的應用程式可能確實需要更多運算資源。 在此情況下,請考慮調整為較高的服務層級,讓應用程式取得它所需的所有資源。 其他時候,程序代碼中的 Bug 可能會導致記憶體流失。 程式代碼撰寫練習也可能會增加記憶體耗用量。 深入瞭解觸發高記憶體耗用量的內容是兩部分的程式。 首先,建立進程傾印,然後分析進程傾印。 來自 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 應用程式的事件記錄檔:
- 登入您的 Kudu 網站 (
https://*yourwebsitename*.scm.azurewebsites.net
)。 - 在功能表中,選取 [偵錯控制台>CMD]。
- 選取 [LogFiles] 資料夾。
- 若要檢視事件記錄檔,請選取eventlog.xml旁的鉛筆圖示。
- 若要下載記錄檔,請執行 PowerShell Cmdlet
Save-AzureWebSiteLog -Name webappname
。
如何? 擷取 Web 應用程式的使用者模式記憶體傾印?
若要擷取 Web 應用程式的使用者模式記憶體傾印:
- 登入您的 Kudu 網站 (
https://*yourwebsitename*.scm.azurewebsites.net
)。 - 選取 [行程總 管] 功能表。
- 以 滑鼠右鍵按兩下w3wp.exe 進程或您的 WebJob 程式。
- 選取 [下載記憶體傾印完整傾印>]。
如何? 檢視 Web 應用程式的流程層級資訊嗎?
您有兩個選項可用來檢視 Web 應用程式的行程層級資訊:
- 在 Azure 入口網站中:
- 開啟 Web 應用程式的 [進程總管]。
- 若要查看詳細數據,請選取 w3wp.exe 程式。
- 在 Kudu 控制台中:
- 登入您的 Kudu 網站 (
https://*yourwebsitename*.scm.azurewebsites.net
)。 - 選取 [行程總 管] 功能表。
- 針對 w3wp.exe 程序,選取 [ 屬性]。
- 登入您的 Kudu 網站 (
當我流覽至我的應用程式時,我看到「錯誤 403 - 此 Web 應用程式已停止」。如何? 解決此問題?
三個條件可能會導致此錯誤:
- Web 應用程式已達到計費限制,且您的網站已停用。
- 入口網站中已停止 Web 應用程式。
- Web 應用程式已達到可能套用至免費或共用調整服務方案的資源配額限制。
若要查看造成錯誤並解決問題的原因,請遵循 Web Apps 中的 步驟:「錯誤 403 – 此 Web 應用程式已停止」。
我可以在哪裡深入了解各種 App Service 方案的配額和限制?
如需配額和限制的相關信息,請參閱 App Service限制。
如何? 閑置時間后減少第一個要求的響應時間?
根據預設,如果 Web 應用程式在一段時間內處於閑置狀態,就會卸除。 如此一來,系統就可以節省資源。 缺點是卸除 Web 應用程式之後第一個要求的回應較長,以允許 Web 應用程式載入並開始提供回應。 在 [基本] 和 [標準服務方案] 中,您可以開啟 [AlwaysOn ] 設定,讓應用程式一律載入。 這樣可消除應用程式閑置後較長的載入時間。 若要變更 AlwaysOn 設定:
- 在 Azure 入口網站 中,移至您的 Web 應用程式。
- 選取 [設定]
- 選取 [ 一般設定]。
- 針對 [ AlwaysOn],選取 [開啟]。
如何? 開啟失敗的要求追蹤?
若要開啟失敗的要求追蹤,請遵循下列步驟:
在 Azure 入口網站 中,移至您的 Web 應用程式。
選取 [所有設定>診斷記錄]。
針對 [失敗的要求追蹤],選取 [ 開啟]。
選取儲存。
在 [Web 應用程式] 刀鋒視窗上,選取 [ 工具]。
選取 [Visual Studio Online]。
如果設定不是 [開啟],請選取 [開啟]。
選取 [執行]。
選取 [Web.config]。
在 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>
若要針對效能緩慢的問題進行疑難解答,請新增此設定(如果擷取要求花費超過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>
選取 [工具>][Kudu>Go]。
在功能表中,選取 [偵錯控制台>CMD]。
選取 LogFiles 資料夾,然後選取名稱開頭 為 W3SVC 的資料夾。
若要查看 XML 檔案,請選取鉛筆圖示。
我看到訊息「背景工作進程要求回收,因為「記憶體百分比」限制。如何? 解決此問題?
32 位進程的最大可用記憶體數量(即使是在 64 位作業系統上)為 2 GB。 根據預設,背景工作進程會在 App Service 中設定為 32 位(以與舊版 Web 應用程式相容)。
請考慮切換至 64 位進程,以便利用 Web 背景工作角色中可用的額外記憶體。 此動作會觸發 Web 應用程式重新啟動,因此請據以排程。
另請注意,64 位環境需要基本或標準服務方案。 免費和共用方案一律會在32位環境中執行。
如需詳細資訊,請參閱 在 App Service 中設定 Web 應用程式。
為什麼我的要求在230秒後逾時?
Azure Load Balancer 的預設閒置逾時設定為四分鐘。 這個設定通常是 Web 要求的合理回應時間限制。 因此,如果您的應用程式在大約 240 秒內未傳回回應,App Service 會傳回用戶端逾時(在 Windows 應用程式上為 230 秒,Linux 應用程式為 240 秒)。 如果您的 Web 應用程式需要背景處理,建議您使用 Azure WebJobs。 Azure Web 應用程式可以呼叫 WebJobs,並在背景處理完成時收到通知。 您可以選擇使用 WebJobs 的多個方法,包括佇列和觸發程式。
WebJobs 是專為背景處理所設計。 您可以在 WebJob 中執行所需的背景處理。 如需 WebJobs 的詳細資訊,請參閱 使用 WebJobs 執行背景工作。
ASP.NET 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。 或者,您也可以在 App Service Web 應用程式中使用部落格文章中說明的兩個因應措施之一,ASP.NET Core 1.0 緩慢效能問題。
我在 Web 應用程式的檔案結構中找不到我的記錄檔。 如何找到它們?
如果您使用 App Service 的本機快取功能,則會影響 App Service 實例之 LogFiles 和資料夾的資料夾結構。 使用本機快取時,會在記憶體 LogFiles 和資料夾中建立子資料夾。 子資料夾會使用命名模式 「unique identifier」 + 時間戳。 每個子資料夾都會對應至執行或執行 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 意見反應社群提交產品意見反應。