目前工作主要服務都是放在 Azure 服務上,因此接觸到 Azure 時間也越來越多,當應用程式發生問題時要如何進行診斷找到 Root cause 呢 ? 過去在地端機房上可能可以先取得執行當下的 Memory Dump 檔案,再把抓下來的 dump file 透過一些記憶體分析工具像是 DebugDiag Tools 或是 WinDBG 來分析原因,那如果今天我們使用的是雲端 Azure 的 Paas 服務該如何處理呢 ? 今天就透過這篇文章來簡單跟大家分享如何在 Azure 上取得執行當下的 Memory dump file,若對於上述內容有問題或是不清楚的地方,歡迎提出來一起討論
App Service Diagnostics
在 Azure App Service 中提供多種工具來協助開發者來針對問題做分析與排除,目前 Diagnostic Tools 分為以下幾類
- Collect .Net Profiler Trace
- Collect Memory Dump
- Check Connection Strings
- Collect Network Trace
- Network/Connectivity Troubleshooter
Step 1 : 開啟 App Service
Step 2 : 點選左邊清單的 Diagnose and solve problems 功能 Step 3 : 點選 Diagnostic tools Step 4 : 在 Diagnostic tools 中選擇 Collect .NET Profiler Traces Step 5 : Mode 是這次目的是單純蒐集或是蒐集後進行分析,Instance 部分則可以選擇要分析的機器名稱,選擇後即可按下 Collect Profiler Trace 按鈕 Step 6 : 按下執行後會開始進行蒐集的動作,會在一分鐘後結束(有選產生報表會多一點點時間),完畢後會在下方產生分析後的報表連結 Step 7 : 開啟報表後則可以看到本次蒐集後的內容與分析結果,中間區塊則有分為五個 section,分別會是在蒐集站台的資訊期間
Slow Request,例如前100名緩慢有哪些,打到那些 endpoint,所花費的時間多久 Fail Requests : 失敗的請求清單,失敗定義 HTTP Status >= 400 Thread Callstacks .NET Exception : 蒐集到關於 .NET 的錯誤分別有哪些
CPU Stacks : Instance CPU 使用的狀況是甚麼 透過以上詳細的資訊,就可以針對異常的問題找到可能潛在的原因是什麼,舉例來說 : 17:00 開始發現系統緩慢,平台可以使用程度下降,這時請求回應的時間是 503,後來發現是呼叫 Auth API 雍塞受到影響造成,都可以猜測的方向看找到蛛絲馬跡再進行下一步的推斷。
結論
如果想要了解關於報告的更多細節可以參考 App Service Diagnostics – Profiling an ASP.NET Web App on Azure App Service,另外 Diagnostics tools 還具備其他更多分析的功能,如果在後續有機會使用到會在分享相關心得的,Hope it helps :D
0 意見:
張貼留言