通常我們可以依靠ApplicationInsights(以下簡稱ai)來收集比如請求(request),依賴項(dependencies),異常(exception)等信息,但是無法收集到比如一個方法(方法內部比如沒有依賴項調用)的信息。
很多時候如果一個方法很慢,我們只能根據ai分析首先是不是依賴項慢導致,如果不是,就以依賴項為節點,看這個依賴項是前面慢還是后面慢,然后在進行下一步分析。
然后又回到了性能優化全靠猜的地步。
ai能不能也有類似一些高階的分析工具所具有的分析代碼某路徑耗時的功能呢?答案是肯定的。
ai有一個功能稱之為探查器,就是專門用於診斷這種代碼級性能的,其中早期的只能在azure上才能使用(無論你是web app部署還是vm部署都可以但是必須要是在azure上的)
這個其實限制了其使用范圍,因為我司並沒有使用azure web app來承載站點而是跑在自己機房上(只能干瞪眼流口水)
現在他有一個面向core的可以自己安裝的版本
具體地址 https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore
目前這個項目還處於beta階段,可以運行在windows和linux下
使用也很簡單,首先項目肯定要是用了ai的,而且要是2.1以上的asp.net core項目,然后在使用ai的基礎上安裝對應的包,然后添加一行代碼即可
需要安裝一個新的ai的profiler的nuget包,注意目前該包只有pre-release版本,如果搜索不到注意下是否勾選了show pre-release package
添加使用Profiler的代碼
裝好之后,站點直接啟動運行即可
此時站點除了常規的ai監控外,額外獲得了profiler的能力,他會偶爾的匯報幾個profiler的包,匯報的策略目前我個人還不清楚不過可以確定這個匯報的包肯定不多
我手頭一個一天5萬多訪問量(2台機器)的站點1天下來也就4個profiler
眾所周知的是ai是基於數據量收費的,如果過多的包這個荷包子是個問題,我這邊目前也是一個項目先扔上去看下會導致多少費用增長,目前看起來還好。
先看看profiler的效果,如果收集到了profiler的話,會在性能面板里顯示出來,嗯。我這里只有4個
點進去可以看到ai所收集到的profiler的詳細信息
這里可以看到我整個流程的一個耗時(當前選中的這個)是300多ms,然后這里可以細化到每個方法的耗時是多少,我就隨便找一個分支不斷點下去
從上圖我們可以看到我這每個操作流程中的耗時,具體可以參考官方文檔 https://docs.microsoft.com/zh-cn/azure/azure-monitor/app/profiler-overview 如何從中分析出你的代碼