本文幫助排查Azure應(yīng)用服務(wù)中應(yīng)用性能緩慢的問(wèn)題。
如果在本文中有任何需要協(xié)助的地方,可以聯(lián)系MSDN Azure和堆棧溢出論壇上的Azure專(zhuān)家?;蛘?,也可以提出Azure支持事件。請(qǐng)轉(zhuǎn)到Azure支持站點(diǎn),并單擊“獲取支持”。
癥狀
瀏覽應(yīng)用時(shí),頁(yè)面加載緩慢,并且有時(shí)還會(huì)超時(shí)。
原因
此問(wèn)題通常是應(yīng)用程序級(jí)別的問(wèn)題造成的,例如:
·網(wǎng)絡(luò)請(qǐng)求耗時(shí)過(guò)長(zhǎng)
·應(yīng)用程序代碼或數(shù)據(jù)庫(kù)查詢(xún)效率低下
·應(yīng)用程序的內(nèi)存/CPU使用率過(guò)高
·應(yīng)用程序因異常而崩潰
疑難解答步驟
故障排除可劃分為三種不同的任務(wù),依次為:
1.觀察和監(jiān)視應(yīng)用程序行為
2.收集數(shù)據(jù)
3.緩解問(wèn)題
應(yīng)用服務(wù)在每個(gè)步驟提供了多種選項(xiàng)。
1.觀察和監(jiān)視應(yīng)用程序行為
跟蹤服務(wù)運(yùn)行狀況
每次發(fā)生服務(wù)中斷或性能下降時(shí)Azure會(huì)進(jìn)行宣傳??梢栽贏zure門(mén)戶(hù)中跟蹤服務(wù)的運(yùn)行狀況。
監(jiān)視應(yīng)用
此選項(xiàng)可讓你找出應(yīng)用程序是否存在任何問(wèn)題。在應(yīng)用的邊欄選項(xiàng)卡中,單擊“請(qǐng)求和錯(cuò)誤”磁貼?!爸笜?biāo)”邊欄選項(xiàng)卡顯示所有可以添加的指標(biāo)。
可能需要在應(yīng)用中監(jiān)視的一些指標(biāo)包括
·平均內(nèi)存工作集
·平均響應(yīng)時(shí)間
·CPU時(shí)間
·內(nèi)存工作集
·請(qǐng)求
監(jiān)視Web終結(jié)點(diǎn)狀態(tài)
如果在“標(biāo)準(zhǔn)”定價(jià)層中運(yùn)行應(yīng)用,應(yīng)用服務(wù)允許從三個(gè)地理位置監(jiān)視兩個(gè)終結(jié)點(diǎn)。
終結(jié)點(diǎn)監(jiān)視可從測(cè)試Web URL的響應(yīng)時(shí)間和運(yùn)行時(shí)間的分布式地理位置配置Web測(cè)試。該測(cè)試可對(duì)Web URL執(zhí)行HTTP GET操作,以從每個(gè)位置確定響應(yīng)時(shí)間和運(yùn)行時(shí)間。每個(gè)已配置位置每5分鐘運(yùn)行一次測(cè)試。
使用HTTP響應(yīng)代碼監(jiān)視運(yùn)行時(shí)間,并且以毫秒為單位計(jì)算響應(yīng)時(shí)間。如果HTTP響應(yīng)代碼大于或等于400或響應(yīng)時(shí)間超過(guò)30秒,則監(jiān)視測(cè)試失敗。如果從所有指定的位置監(jiān)視測(cè)試均成功,則終結(jié)點(diǎn)被視為可用。
有關(guān)詳細(xì)信息,請(qǐng)參閱在Azure應(yīng)用服務(wù)中監(jiān)視應(yīng)用
使用擴(kuò)展的應(yīng)用程序性能監(jiān)視
還可以使用站點(diǎn)擴(kuò)展監(jiān)視應(yīng)用程序的性能。
每個(gè)應(yīng)用服務(wù)應(yīng)用都提供了一個(gè)可擴(kuò)展的管理終結(jié)點(diǎn),通過(guò)此終結(jié)點(diǎn)可使用一組作為站點(diǎn)擴(kuò)展部署的功能強(qiáng)大的工具。擴(kuò)展包括:
·源代碼編輯器,如Azure DevOps。
·連接的資源(如連接到應(yīng)用的MySQL數(shù)據(jù)庫(kù))的管理工具。
2.收集數(shù)據(jù)
應(yīng)用服務(wù)為Web服務(wù)器和Web應(yīng)用程序中的日志記錄信息提供診斷功能。此信息分為Web服務(wù)器診斷和應(yīng)用程序診斷。
啟用Web服務(wù)器診斷
可以啟用或禁用以下種類(lèi)的日志:
·詳細(xì)錯(cuò)誤日志記錄-指示故障的HTTP狀態(tài)代碼(狀態(tài)代碼400或更大數(shù)字)的詳細(xì)錯(cuò)誤消息。其中可能包含有助于確定服務(wù)器返回錯(cuò)誤代碼的原因的信息。
·失敗請(qǐng)求跟蹤-有關(guān)失敗請(qǐng)求的詳細(xì)信息,包括對(duì)用于處理請(qǐng)求的IIS組件和每個(gè)組件所用的時(shí)間的跟蹤。在嘗試提高應(yīng)用性能或查找導(dǎo)致特定HTTP錯(cuò)誤的問(wèn)題時(shí),此信息很有用。
·Web服務(wù)器日志記錄-使用W3C擴(kuò)展日志文件格式的HTTP事務(wù)信息。這在確定總體應(yīng)用指標(biāo)(如處理的請(qǐng)求數(shù)量或來(lái)自特定IP地址的請(qǐng)求數(shù))時(shí)非常有用。
啟用應(yīng)用程序診斷
可通過(guò)多種選項(xiàng)收集應(yīng)用服務(wù)中的應(yīng)用程序性能數(shù)據(jù)、從Visual Studio中實(shí)時(shí)分析應(yīng)用程序,或修改應(yīng)用程序代碼以記錄更多信息和跟蹤??梢曰卺槍?duì)應(yīng)用程序的訪問(wèn)權(quán)限和通過(guò)監(jiān)視工具觀察到的內(nèi)容選擇相關(guān)選項(xiàng)。
手動(dòng)設(shè)置診斷跟蹤
如果有權(quán)訪問(wèn)Web應(yīng)用程序源代碼,使用應(yīng)用程序診斷可以捕獲Web應(yīng)用程序生成的信息。ASP.NET應(yīng)用程序可使用System.Diagnostics.Trace類(lèi)將信息記錄到應(yīng)用程序診斷日志。但是需要更改代碼并重新部署應(yīng)用程序。如果應(yīng)用在測(cè)試環(huán)境中運(yùn)行,則推薦使用此方法。
有關(guān)如何在應(yīng)用程序中配置日志記錄的詳細(xì)說(shuō)明,請(qǐng)參閱在Azure應(yīng)用服務(wù)中啟用應(yīng)用的診斷日志記錄。
使用診斷工具
應(yīng)用服務(wù)提供了智能的交互式體驗(yàn),可幫助我們排查應(yīng)用的問(wèn)題,且無(wú)需配置。如果應(yīng)用確實(shí)出現(xiàn)問(wèn)題,診斷工具會(huì)指出問(wèn)題所在,并引導(dǎo)你獲取適當(dāng)?shù)男畔?,以便更輕松快速地排查和解決問(wèn)題。
若要訪問(wèn)應(yīng)用服務(wù)診斷,請(qǐng)?jiān)贏zure門(mén)戶(hù)中導(dǎo)航到你的應(yīng)用服務(wù)應(yīng)用或應(yīng)用服務(wù)環(huán)境。在左側(cè)導(dǎo)航欄中,單擊“診斷并解決問(wèn)題”。
使用Kudu調(diào)試控制臺(tái)
應(yīng)用服務(wù)隨附可用于調(diào)試、瀏覽和上傳文件的調(diào)試控制臺(tái),以及用于獲取環(huán)境相關(guān)信息的JSON終結(jié)點(diǎn)。此控制臺(tái)稱(chēng)為應(yīng)用的Kudu控制臺(tái)或SCM儀表板。
轉(zhuǎn)到鏈接https://<Your app name>.scm.chinacloudsites.cn/即可訪問(wèn)此儀表板。
Kudu提供的一些信息和功能包括:
·應(yīng)用程序的環(huán)境設(shè)置
·日志流
·診斷轉(zhuǎn)儲(chǔ)
·調(diào)試控制臺(tái),可以在其中運(yùn)行Powershell cmdlet和基本DOS命令。
Kudu的另一項(xiàng)有用功能是,如果應(yīng)用程序引發(fā)第一次異常,可以使用Kudu和SysInternals工具Procdump創(chuàng)建內(nèi)存轉(zhuǎn)儲(chǔ)。這些內(nèi)存轉(zhuǎn)儲(chǔ)是進(jìn)程的快照,通??蓭椭挪檩^復(fù)雜的應(yīng)用問(wèn)題。
有關(guān)Kudu提供的功能的詳細(xì)信息,請(qǐng)參閱你應(yīng)該了解的Azure DevOps工具。
3.緩解問(wèn)題
縮放應(yīng)用
在Azure應(yīng)用服務(wù)中,為了提高性能和吞吐量,可以調(diào)整運(yùn)行應(yīng)用程序的規(guī)模??v向擴(kuò)展應(yīng)用涉及到兩個(gè)相關(guān)操作:將應(yīng)用服務(wù)計(jì)劃更改為較高的定價(jià)層,以及在切換到較高的定價(jià)層后配置特定的設(shè)置。
有關(guān)縮放的詳細(xì)信息,請(qǐng)參閱縮放Azure應(yīng)用服務(wù)中的應(yīng)用。
此外,可以選擇在多個(gè)實(shí)例上運(yùn)行應(yīng)用程序。擴(kuò)展不僅能提供更強(qiáng)大的處理功能,而且還能提供一定程度的容錯(cuò)。如果進(jìn)程在某個(gè)實(shí)例上中斷,其他實(shí)例會(huì)繼續(xù)處理請(qǐng)求。
可以將縮放設(shè)置為手動(dòng)或自動(dòng)。
使用AutoHeal
AutoHeal會(huì)根據(jù)你選擇的設(shè)置(例如配置更改、請(qǐng)求、基于內(nèi)存的限制或執(zhí)行請(qǐng)求所需的時(shí)間),回收應(yīng)用程序的工作進(jìn)程。在大多數(shù)情況下,回收進(jìn)程是在出現(xiàn)問(wèn)題后進(jìn)行恢復(fù)的最快方式。盡管始終都可從Azure門(mén)戶(hù)中直接重啟應(yīng)用,但AutoHeal可以自動(dòng)執(zhí)行此操作。只需在應(yīng)用的根web.config中添加一些觸發(fā)器即可。即使應(yīng)用程序并非.NET應(yīng)用,這些設(shè)置的工作方式也仍然相同。
有關(guān)詳細(xì)信息,請(qǐng)參閱自動(dòng)修復(fù)Azure網(wǎng)站。
重啟應(yīng)用
重啟通常是在發(fā)生一次性問(wèn)題后進(jìn)行恢復(fù)的最簡(jiǎn)單方式。Azure門(mén)戶(hù)的應(yīng)用邊欄選項(xiàng)卡中提供了用于停止或重啟應(yīng)用的選項(xiàng)。
還可以使用Azure Powershell管理應(yīng)用。有關(guān)詳細(xì)信息,請(qǐng)參閱將Azure PowerShell與Azure資源管理器配合使用。