日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

netpref 使用_使用PrefView监测.NET程序性能(二):Perfview的使用

發(fā)布時(shí)間:2024/4/17 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netpref 使用_使用PrefView监测.NET程序性能(二):Perfview的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在上一篇博客中,我們了解了對(duì)Windows及應(yīng)用程序進(jìn)行性能分析的基礎(chǔ):Event Trace for Windows (ETW)。現(xiàn)在來(lái)看看基于ETW的性能分析工具——Perfview.exe

Perfview簡(jiǎn)介

Perfview是一個(gè)開源的CPU和內(nèi)存性能分析工具,也包括一些針對(duì).NET的分析功能,例如GC分析,JIT分析,甚至ASP.NET中的請(qǐng)求統(tǒng)計(jì)等等。Perfview是一個(gè)Windows應(yīng)用程序,但也能對(duì)在Linux系統(tǒng)上采集的數(shù)據(jù)進(jìn)行分析(參考)。Perfview免安裝,而且只是一個(gè)14M的.exe文件,非常容易部署到需要進(jìn)行性能分析的機(jī)器上,例如生產(chǎn)環(huán)境的服務(wù)器。而且在性能數(shù)據(jù)收集的過(guò)程中不需要重啟應(yīng)用程序或者服務(wù)器,而且收集的性能數(shù)據(jù)日志(.etl文件)可以被拷貝到其他Windows機(jī)器上,再進(jìn)行分析工作,對(duì)業(yè)務(wù)的影響非常少。

Perfview已遷移到GitHub上,可以在上面下載Perfview.exe,clone庫(kù)或者查看相關(guān)資料。

Perfview使用

在簡(jiǎn)單介紹Perfview后,我們來(lái)使用Perfview進(jìn)行一個(gè)小小的性能分析,來(lái)熟悉一下Perfivew的基本操作。

這個(gè)實(shí)驗(yàn)使用的代碼,就是Vance Morrison在視頻教程中用到的Console程序。代碼可以在Perfivew自帶的幫助文件中找到。

using System;

class Program

{

public static int aStatic = 0;

// Spin is a simple compute bound program that lasts for 5 seconds

// It is a useful test program for CPU profilers.

static int Main(string[] args)

{

int numSec = 5;

if (args.Length == 1)

numSec = int.Parse(args[0]);

Console.WriteLine("Spinning for {0} seconds", numSec);

RecSpin(numSec);

return 0;

}

// Spin for 'timeSec' seconds. We do only 1 second in this

// method, doing the rest in the helper.

static void RecSpin(int timeSec)

{

if (timeSec <= 0)

return;

--timeSec;

SpinForASecond();

RecSpinHelper(timeSec);

}

// RecSpinHelper is a clone of RecSpin. It is repeated

// to simulate mutual recursion (more interesting example)

static void RecSpinHelper(int timeSec)

{

if (timeSec <= 0)

return;

--timeSec;

SpinForASecond();

RecSpin(timeSec);

}

// SpingForASecond repeatedly calls DateTime.Now until for

// 1 second. It also does some work of its own in this

// methods so we get some exclusive time to look at.

static void SpinForASecond()

{

DateTime start = DateTime.Now;

for (;;)

{

if ((DateTime.Now - start).TotalSeconds > 1)

break;

// Do some work in this routine as well.

for (int i = 0; i < 10; i++)

aStatic += i;

}

}

}

以上代碼很簡(jiǎn)單,SpinForASecond()在一秒內(nèi)不斷調(diào)用DateTIme.Now,而RecSpin()和RecSpinHelper()則不斷地相互調(diào)用對(duì)方。這里使用循環(huán)的目的是,循環(huán)執(zhí)行是一種典型的CPU密集型操作,而RecSpin()和RecSpinHelper()則是為了豐富程序的函數(shù)調(diào)用棧。

步驟一:收集程序運(yùn)行數(shù)據(jù),生成由ETW數(shù)據(jù)組成的.etl文件。

Perfview提供兩種收集數(shù)據(jù)的方式,Run和Collect。“Run”是直接指定需要啟動(dòng)的應(yīng)用程序的名稱,以便啟動(dòng)該程序。“Collect”則是直接啟動(dòng)Perfview并開始收集。但不要以為"Run"方式只收集指定程序的數(shù)據(jù)。事實(shí)上無(wú)論哪種方式,Perfview都會(huì)收集系統(tǒng)范圍內(nèi)全部數(shù)據(jù),并且收集完成后,需要選擇某一個(gè)進(jìn)程以進(jìn)行分析。

我們以“Run”方式來(lái)收集以上代碼生成的Tutorial.exe程序。

在彈出的對(duì)話框中,填入需要啟動(dòng)Tutorial.exe的全文件名,以及填入生成etl文件的文件名(這里是PerfViewData.etl),并點(diǎn)擊“Run Command”:

Perfview收集和處理數(shù)據(jù)的時(shí)間比較長(zhǎng)。在處理過(guò)程中,Perfview的右下角會(huì)閃動(dòng),并且可以查看運(yùn)行日志,了解到當(dāng)前Perfview在執(zhí)行什么工作。

步驟二:選擇需要分析的進(jìn)程

在收集完畢后,在左邊選擇“PerfViewData.etl.zip”,并在展開的選擇項(xiàng)中雙擊選擇“CPU Stacks”,此時(shí),會(huì)彈出進(jìn)程選擇對(duì)話框,選擇需要進(jìn)行CPU分析的進(jìn)程。這里選擇我們運(yùn)行的Tutorial.exe進(jìn)程。

步驟三:查看執(zhí)行棧視圖

在雙擊選擇了“Tutorial.exe”的進(jìn)程后,進(jìn)入到程序詳細(xì)的執(zhí)行棧的視圖中。這里記錄著Tutorial.exe的函數(shù)調(diào)用樹,以及函數(shù)的執(zhí)行時(shí)間。

在該視圖中,你可以看到Tutorial.exe的函數(shù)調(diào)用情況,包括函數(shù)調(diào)用樹(Call-Tree),某個(gè)函數(shù)的調(diào)用者(Calls)和被該函數(shù)調(diào)用的函數(shù)(Callees),另外,在視圖右側(cè),是函數(shù)的執(zhí)行時(shí)間,其中,“Exc”是指 Exclusive,是指函數(shù)自己(不包含該函數(shù)里執(zhí)行的子函數(shù))的執(zhí)行時(shí)間,而“Inc”是指Inclusive,指該函數(shù)及該函數(shù)中執(zhí)行的子函數(shù)的總的執(zhí)行時(shí)間。

另外,這個(gè)執(zhí)行時(shí)間是怎么認(rèn)定的呢? 答案是CPU采樣。Perfview對(duì)CPU進(jìn)行采樣,默認(rèn)每個(gè)CPU采樣是1毫秒(在Prefview的高級(jí)設(shè)置中可以設(shè)置到0.125毫秒~1毫秒),每次采樣中可以得到當(dāng)前CPU正則執(zhí)行什么代碼。例如DateTime_getNow()有3250采樣,則可以說(shuō)明在整個(gè)程序運(yùn)行中,DateTime_getNow()占用了3250毫秒的CPU時(shí)間,占整個(gè)運(yùn)行時(shí)間的66.2%。通過(guò)比較各個(gè)函數(shù)的執(zhí)行時(shí)間,我們就可以知道程序中哪個(gè)函數(shù)占用比較多的CPU時(shí)間。

以上便是Prefview的基本的使用步驟。Prefview提供了非常多并強(qiáng)大的功能,例如分組(Grouping),折疊(Folding),時(shí)間范圍選擇,這些在后續(xù)教程里再聊。而更強(qiáng)大的是,F1幫助手冊(cè)里,有著非常詳細(xì)的使用說(shuō)明和術(shù)語(yǔ)解析,而且界面上幾乎每個(gè)功能都有說(shuō)明的ToolTip和說(shuō)明的超鏈接如果對(duì)某個(gè)功能用法不是很清楚,可以方便地找到說(shuō)明,真是業(yè)界良心。

參考資料

總結(jié)

以上是生活随笔為你收集整理的netpref 使用_使用PrefView监测.NET程序性能(二):Perfview的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。