只有累積,沒有奇蹟

2022年3月9日 星期三

[Azure] App Service Diagnostics - 應用服務診斷

前言
目前工作主要服務都是放在 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
今天要分享的是透過 Profile Trace 可以幫助識別 .NET 異常的 Exception Type、異常訊息資訊與 Callstack,不需要再額外安裝其他的工具,以下就來介紹如何使用 Azure 來設定 .NET Profile Trace 選項
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

2022年3月2日 星期三

[sharing] MS T-SQL 效能調教從放棄到入門

分享
自己在過去開發經驗都是以 C# 與 ASP.NET 為主,在與資料庫溝通時都是自己寫 T-SQL 查詢語法使用 Stored procedure 讀取需要的資料,身為工程師就必須特別留意自己撰寫語法的效能問題,盡量避免寫出來的語法效能不佳影響到 Database 或是網站的運行,自己過去工作經驗也遇到公司使用很頂級的伺服器依舊存在效能不彰的問題,因此效能調教部分個人覺得也是資深工程師的必備的技能之一。
下面是前一份工作與同事分享的投影片,主要內容是分享自己覺得在 MS SQL 語法的一些基本觀念,後面也有帶到微軟針對效能調教的一些建議方向 Improving .NET Application Performance and Scalability 以及如何觀看語法的執行計畫基本觀念,提供給有興趣的朋友也希望可以幫助到各位 :)

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com