轉:https://www.cnblogs.com/jearay/p/6248351.html
大家都知道.net有一套自己的內存(垃圾)回收機制,除非有一些數據(方法)長期占有內存不隨着垃圾回收功能而釋放內存,這樣就造成了我們經常說的內存泄露、內存持續增長得不到釋放等問題導致APS.NET網站或者C/S應用程序的用戶無法正常使用。最終會導致用戶通過客服人員或者技術支持人員投訴公司的技術部門,形成一連串的未知的不良反映。
不管哪位性能測試人員,遇到這樣的問題都是摸不着頭腦,不知從何處下手。.net環境中不像Java有那么多的工具可以支撐,比如性能測試經常用到的Jconsole、Jprofiler等工具,並且基於JAVA運行環境的在打印GC日志方面也很強大。對於.net平台,微軟也提供的.net輔助工具CLR Profiler可以很好的幫助我們的性能測試人員以及研發人員,找到內存沒有及時回收,占着內存不釋放的方法(詳細到這個方法下面定義的數組或者其他變量)。
下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=16273
可根據自己電腦.NET的版本下載相應的CLRProfiler,我下載的是CLR Profiler for .NET Framework 4版本的。
下載后提示解壓縮,選擇要加壓到的目錄;然后進入D:\SoftWare\CLRProfiler4\CLRProfiler\Binaries目錄下選擇對應操作系統64位或者32位的CLRProfiler.exe。
在說一下,CLRProfiler可以分析.net平台開發的幾乎所有的產品,包括C/S應用程序、服務和asp.net編寫的網站等。
說明:該工具適用於性能測試瓶頸定位,做性能測試時不建議開啟,需要安裝在應用服務器所在服務器(iis和.netframework已經安裝好)
我的測試環境是:IIS服務器(asp.net開發的站點)+MS sqlserver
打開CLRProfiler界面,選中Profiling active、Allocation和Calls,【Start Application】是加載.net開發的exe程序的;【Start URL】是輸入被測頁面URL的;
在IE中測試asp.Net開發的頁面,CLRProfiler首先要加載IIS所需要的環境變量,CLR Profiler然后提示你加載ASP.NET應用程序和等待ASP.NET工作進程啟動。
在File菜單中點擊Profile ASP.NET
停止IIS服務可能要很長時間,需要耐心等待。最后提示可以測試頁面啦
“Waiting for ASP.NET to start common language runtime - this is the time to load your test page”
點擊【Start URL】按鈕,輸入我們要測試的頁面URL,點擊OK,就會自動打開我們要檢查內存有不釋放內存的頁面,多在頁面中使用一會,以便CLR Profiler收集更多的數據。
當已完成頁面的運行,請點擊CLR Profiler窗口中的 【Kill ASP.NET】。然后CLR Profiler自動關閉IIS,移除環境變量,重啟IIS。
點擊【Allocation Graph】打開內存分配視圖,在這個視圖當中我們可以看出堆棧是如何分別對象的
點擊【Objects by Address】按鈕將會顯示各種方法在內存中占用的直方圖界面
可以通過選中那個視圖中的某一個柱形條,右擊show who allocated。點擊這個菜單項顯示關於所選分配的特定詳細內容,而不是所有分配的
點擊[TimeLine]按鈕,在打開的圖片中可以清晰的看出各次回收時間和前后內存占用量情況
在view菜單中,有很多沒有顯示的菜單。
點擊call tree 菜單,可以看到在不同線程下,所有方法占用內存大小,被調用次數等信息