天天看點

建構高性能ASP.NET站點 第七章 如何解決記憶體的問題(前中篇)—托管資源優化—監測CLR性能

建構高性能ASP.NET站點 第七章 如何解決記憶體的問題(前中篇)—托管資源優化—監測CLR性能

    前言:在上一篇文章中講述了一些垃圾回收的一些知識,本篇就講述如何來監測CLR是否導緻了一些性能問題。 

本篇的議題如下:

記憶體問題概述(前篇)

托管資源優化(前篇)

         對象的生命周期(前篇)

         對象的”代“(前篇)

         大對象堆(LOH) (前篇)

         CLR計數器的使用         (中篇)

         CLR Profiler的使用(中篇)

         垃圾回收器的不同版本(中篇)

         對象使用注意事項(後篇)

         常用優化措施(後篇)

非托管資源優化

Session會話的優化

     CLR計數器的使用

我們使用系統自帶的性能監測工具來跟蹤和監測垃圾回收器。

下面,首先介紹幾個常用的CLR性能監測計數器,我們一般檢視.NET CLR Memory分類下的計數器:
Percent Time in GC 表明了從上次垃圾回收機制運作之後到現在這段時間内,運作垃圾回收機制所花的時間占總時間的百分比。不要超過10%。
Gen 0 heap size 這個數值不是表明目前托管堆中Gen 0對象所占的大小,而是指:還可以配置設定的Gen 0對象的大小
Gen 1 heap size 表明目前Gen 1 對象所占的托管堆的空間大小
Gen 2 heap size 表明目前Gen 2 對象所占的托管堆的空間大小
Large Object Heap size 目前LOH的大小
# Byte in all Heaps 是上面Gen 0 heap size,Gen 1 heap size,Gen 2 heap size,Large Object Heap size所有的種和,也就是整個托管堆所占的空間大小
# Gen 0 Collections 從系統開啟之後到現在,垃圾回收器回收Gen 0對象的次數
# Gen 1 Collections 從系統開啟之後到現在,垃圾回收器回收Gen 1對象的次數
# Gen 2 Collections 從系統開啟之後到現在,垃圾回收器回收Gen 2對象的次數

介紹完上面的一些計數器之後,大家可以運作”perfmon”指令,打開性能監測工具。

下面開始介紹CLR Profiler(CLR 透析器)

     CLR Profiler

CLR Profiler是微軟開發的一個工具,這個工具可以用來檢測CLR所占用的記憶體詳情。

大家可以去下面的連結去下載下傳這個工具:

http://www.microsoft.com/downloads/details.aspx?familyid=a362781c-3870-43be-8926-862b40aa0cd0&displaylang=en 

下面的連結詳細的講述這個工具的用法:

         http://msdn.microsoft.com/zh-cn/magazine/ee309515.aspx#MtViewDropDownText

         在這裡,隻是簡單的介紹一下如何使用,至于詳細的操作,還請大家去檢視上面給出的連結。使用的步驟如下:

1.       運作CLR Proflier

2.       確定”Profiling active, Allocations, Calls”都勾選上。如下:

建構高性能ASP.NET站點 第七章 如何解決記憶體的問題(前中篇)—托管資源優化—監測CLR性能

3.       選擇”File->Profile ASP.NET”.這個操作的背後會停止IIS的運作,然後插入一些指令,然後重新開機IIS,是以這個工具在生産環境中慎用。

建構高性能ASP.NET站點 第七章 如何解決記憶體的問題(前中篇)—托管資源優化—監測CLR性能

4.       然後我們可以在VS中F5運作我們的網站(確定在建立網站的時候是以IIS方式來建立站點的,而不是選擇”檔案系統”的方式建立)

5.       在界面上面點選”Kill ASP.NET”.這個操作的背後會移除之前加入到IIS中的一些監視指令。點選按鈕之後,會出現一些界面。這個界面上面顯示了Gen0, Gen1 Gen2 ,LOH所占的大小,如下:

建構高性能ASP.NET站點 第七章 如何解決記憶體的問題(前中篇)—托管資源優化—監測CLR性能

6.       我們還可以點選”Histogram”按鈕。這個界面展示了不同大小以及不同類型的對象所占的比例。下面對看出,系統中有很多的string對象,也就說,系統中的string類型的對象占據了系統大部分的記憶體空間。

建構高性能ASP.NET站點 第七章 如何解決記憶體的問題(前中篇)—托管資源優化—監測CLR性能

         大家可以檢視更多的資訊,這裡不再贅述了,下面我們來看看垃圾回收器的版本問題。

    垃圾回收器版本

    在CLR中,垃圾回收器是有兩個版本的:

1.       服務端版本。CLR中的這個垃圾回收器版本進行了一系列的記憶體,處理器優化,用來進一步的提高性能。

2.       工作組版本,這是相對服務端版本而言的,主要是用在桌面開發中,例如在WPF,Winform中,就是采用的這個版本垃圾回收器。

    在ASP.NET中就是采用的CLR服務端版本的垃圾回收器。

      OK,今天就暫時寫到這裡,下一篇講述一些針對上述問題的一些優化措施。