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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

QQ浏览器性能提升之路-windows性能分析工具篇

發(fā)布時間:2023/12/3 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QQ浏览器性能提升之路-windows性能分析工具篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:jackxpzhao

如果你要在Windows上面做性能相關(guān)的工作,那WPT一定是個必備的神器。WPT的全名是Windows Performance Toolkit,是Windows下用來進行性能分析的一套工具,它的功能非常強大,你可以使用它來監(jiān)控CPU,內(nèi)存,磁盤和網(wǎng)絡(luò)等等的活動,從而來確定當(dāng)前系統(tǒng)的性能瓶頸。

WPT由兩個獨立的工具組成: Windows Performance Recorder (WPR) and Windows Performance Analyzer (WPA)。顧名思義,WPR記錄Windows ETW產(chǎn)生的性能數(shù)據(jù)從而生成ETL文件,WPA則負責(zé)分析ETL文件。

安裝和說明

你可以通過下載安裝Windows ADK得到 Windows 性能工具包 (WPT) 。https://www.microsoft.com/zh-CN/download/details.aspx?id=39982

安裝后幾個比較重要的文件,默認(rèn)路徑在:C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit

  • wpa.exe — 解析ETL文件,并圖形化、表格化展示。

  • wpaexporter.exe — 導(dǎo)出ETL文件的解析結(jié)果成文本格式。

  • wpr.exe — 記錄ETW產(chǎn)生的數(shù)據(jù),命令行模式。

  • WPRUI.exe — 記錄ETW產(chǎn)生的數(shù)據(jù),圖形化界面,更友好。

  • xperf.exe — 早期版本W(wǎng)PT的核心組件Xperf,所以現(xiàn)在也習(xí)慣將WPT稱為XPerf。Xperf的功能類似于現(xiàn)在的wpr+wpaexporter,可以記錄ETW產(chǎn)生的數(shù)據(jù),也可以導(dǎo)出結(jié)果到文本。

  • xperfview — 早期版本W(wǎng)PT中的分析工具,功能和現(xiàn)在的wpa一樣,WPT從版本8以后已經(jīng)沒有這個exe了。在WinXP上只能使用舊版的Xperf,而且建議用對應(yīng)的xperfview打開分析。

工作原理

和其他的性能分析工具不同,WPT是由Windows本身的事件機制來提供支持的——Event Tracing for Windows (ETW)。

ETW是從Windows 2000開始就引入的一種高速的事件記錄機制,自那時以后,各種Windows操作系統(tǒng)核心和服務(wù)組件都通過ETW記錄其活動,它現(xiàn)在是Windows平臺上的關(guān)鍵系統(tǒng)儀表技術(shù)之一。在Windows 7中,ETW得到了進一步的增強。 正是基于ETW的優(yōu)秀性能和強大功能,越來越多的第三方應(yīng)用程序開始放棄自己的日志系統(tǒng),逐漸開始使用ETW來追蹤和記錄其狀態(tài)和活動,從而進行性能調(diào)優(yōu)或是進行應(yīng)用程序的日常維護。

下圖來自MSDN,ETW的主要基本架構(gòu)分成4個部分:Provider,Controller,Consumer和Session。

  • Provider:所謂的Provider,就是事件的提供者,它可以是系統(tǒng)組件,驅(qū)動程序或者是我們開發(fā)的應(yīng)用程序, 我們在最后的記錄文件中看到的事件就是來自于他們。首先,它需要向系統(tǒng)進行注冊一個Event Trace,然后當(dāng)這個Provider被Controller啟動(Enable)后,它就可以開始向相應(yīng)的Event Trace Session發(fā)送事件了。

  • Controller:Controller就是一個控制器。它的主要任務(wù)有兩個:一是Event Trace Session的控制管理。它利用StartTracefunction在內(nèi)存中創(chuàng)建一個Event Trace session,這樣Provider就知道該往哪里發(fā)生事件。而Controller也會負責(zé)將Session里記錄的事件送到Consumer。Controller的第二個任務(wù)就是對Provider進行管理,啟動或是停止Provider。

  • Consumer:Consumer實時地從Event Trace Session或者是日志文件中訂閱事件。

  • Session:它存在于內(nèi)核中,用于表示一個ETW事件記錄會話。系統(tǒng)中可以存在多個Session,每個Session都可以接收來自于多個Provider的事件,最后我們可以將多個Session中的事件寫入一個日志文件中,這個日志文件就叫做Trace。

通過ETW,我們可以將系統(tǒng)所有關(guān)鍵的地方都加入事件,記錄其行為和堆棧,比如CPU執(zhí)行,線程切換和讀寫磁盤,這樣我們就可以利用這些信息來進行分析了。

更多的工作原理大家可以自行參考官方介紹。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363668(v=vs.85).aspx

如何開始

說這么多,究竟如何才能定位性能問題呢?

把大象放進冰箱需要三步:第一步,把冰箱門打開;第二步,把大象放進去;第三步把冰箱門帶上。我們只需要兩步:

1) 生成ETL文件

先啟動Xperf,這里只列了幾個常用的參數(shù)
xperf -start SessionName -on Flags|Groups -f filename -maxfile Size -filemode Mode -stackwalk flags|@file

  • -start [SessionName]:需要啟動的Session Name,只記錄kernel logging的話Name可以為空。

  • -on Flags|Groups:指定需要開啟的provider flags or groups,通過加號(+)分隔。

  • -f filename:指定寫入的文件名字,Kernel trace默認(rèn)是Kernel.etl, user trace默認(rèn)是User.etl。

  • -maxfile Size:限定日志文件的大小,單位MB。

  • -filemode Mode:指定文件寫入模式,默認(rèn)是”Sequential”,還有”Circular”, “Append”, “NewFile”。

  • -stackwalk flags|@file:開啟call stack的記錄。

然后停止Xperf并生成ETL文件。

xperf -stop -stop Usersesssion -d filename

第一個stop停止kernel logging的記錄,第二個stop停止名為Usersesssion的session,如果沒有user session直接xperf -stop -d filename即可。

2) 分析ETL文件

使用wpa打開ETL文件,或者通過Xperf、wpaexporter導(dǎo)成文本格式分析。

踩過的坑

Xperf的啟動、配置、解析有很多參數(shù),不是很容易上手,這里說下幾個踩過的坑。

  • 1) 版本問題:目前Xperf能下載到的版本有4.8 / 6.3 / 10.0,這幾個版本的兼容性并不是很好,生成ETL文件后,一定注意要用同版本的Xperf、WPA或是XperfView去分析,用不同版本的話會有一些奇怪的問題,例如打開報錯、看不到關(guān)鍵數(shù)據(jù)、閃退等等。

  • 2) 如果你正在使用Process Monitor或Process Explorer,需要先關(guān)閉它們再啟動Xperf,否則會報錯,因為這兩個工具也會通過ETW收集信息。

  • 3) Win XP只支持老版本的WPT,也就是用WPT版本6(XPerf Version 4.8)捕獲Trace。

  • 4) Xperf的啟動參數(shù)很多,開的越多帶來的額外系統(tǒng)開銷也會越多,ETL文件也會越大。所以一定要按需配置,有針對性的開啟需要的providers。

  • 5) 雖然我習(xí)慣了Xperf,但還是推薦大家優(yōu)先嘗試新版本里面的WPRUI,在易用性方面已經(jīng)改善了很多。關(guān)于各個Scenario的含義,可以參考微軟的官方文檔。(當(dāng)然他們寫的很簡略……)
    https://msdn.microsoft.com/zh-CN/library/windows/hardware/dn927307.aspx

  • 6) 針對Xperf配置麻煩的問題我也封裝了一個腳本,啟動參數(shù)包含一些經(jīng)常用到的providers,循環(huán)文件寫入模式,支持Win7 / Win10 / XP。碰到可以復(fù)現(xiàn)的性能問題時,雙擊對應(yīng)的bat腳本即可。也推薦同學(xué)們嘗試,可以在附件里面下載。

  • 7) 如果開啟調(diào)用堆棧(call stacks)記錄功能,得先有對應(yīng)的providers flag,然后通過-stackwalk開啟堆棧調(diào)用記錄。下面這個例子記錄sampling profiler call stacks。
    xperf -on PROC_THREAD+LOADER+PROFILE -stackwalk Profile
    在64位的Windows開啟stackwalk的功能需要設(shè)置注冊表DisablePagingExecutive。
    REG ADD “HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management” -v DisablePagingExecutive -d 0x1 -t REG_DWORD -f
    設(shè)置完成后需要重啟操作系統(tǒng)才能記錄調(diào)用堆棧。

高CPU占用實戰(zhàn)

持續(xù)的高CPU占用是很常見的性能問題,為了方便重現(xiàn),我們先借助小工具CPUSTRES.EXE模擬High CPU usage。軟件打開后active所有的thread,并設(shè)置下activity為Max即可。

通過Process Explorer可以看到系統(tǒng)的CPU占用已經(jīng)達到50%左右,大部分都是CPUSTRES造成的。

1. 生成ETL文件

現(xiàn)在我們先通過上文中提到的腳本捕獲一個有效的ETL文件。

  • 雙擊“Win7_開始監(jiān)控.bat”,出現(xiàn)提示字樣開始等待,因為這是CPU持續(xù)占用問題,特征很明顯,等待幾秒鐘后Xperf就應(yīng)該收集到了足夠多的信息。

  • 在命令行窗口回車,腳本會自動生成ETL文件并壓縮。

  • 如果你想手動啟停Xperf的話,可以在命令行輸入:
    xperf.exe -start -on Base -stackwalk Profile
    已知是CPU占用問題,不要開啟其他providers,其中Base provider本身是一個kernel group,包含:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO+MEMINFO_WS
    片刻后命令行停止即可:
    xperf -stop –d test.etl

  • 你也可以通過WPR或是WPRUI來捕獲這個ETL文件。(自己動手試試吧……)

2. 分析這個ETL文件

打開之后我們會發(fā)現(xiàn)WPA的左側(cè)有很多的圖,并且他們被分為幾類:

  • System Activity:系統(tǒng)活動,里面主要是進程線程的生命周期,原始事件等等內(nèi)容。

  • Computation:記錄了CPU的各項活動。

  • Storage:記錄了磁盤的活動和文件的操作。

  • Memory:記錄了系統(tǒng)內(nèi)存的變化。

  • Power:記錄了電源相關(guān)的各種信息。

展開Computation視圖后,可以看到CPUSTRES.EXE的CPU Weight百分比和Process Explorer看到的一致,50%左右。

Symbols

沒有符號文件的話,分析Xperf trace基本是找不到太多有用的信息的。

  • 打開WPA的Configure Symbol Paths窗口

  • 2.Symbol Path:
    srv*C:\Symols*http://msdl.microsoft.com/download/symbols;Y:\;
    http://msdl.microsoft.com/download/symbols是微軟官方的symbol server,在load symbols后,WPA會把用到過的symbols文件下載到C:\Symbols,這樣用到過的symbols文件只會下載一次。Path通過分號(;)隔開,對于用戶自己的應(yīng)用程序,需要在path里面加上對應(yīng)版本的符號文件路徑。

  • 3.SymCache Path
    WPA用SymCache文件來緩存PDB的符號信息,一旦ETL文件相關(guān)的PDB文件被緩存過,對這個文件重新加載符號文件會快很多。

Loading Symbols之后,可以看到微軟自己的function stack都解析出來了,因為沒有CPUSTRES.EXE的符號文件,我們看不到具體的調(diào)用棧,以及是哪個函數(shù)造成的如此高的CPU占用。

如果這是你自己的應(yīng)用程序,通過加載符號文件后相信能夠很容易從代碼級別定位到問題所在。當(dāng)然Xperf的trace并不是萬能的,要想快速從眾多的圖表中找到關(guān)鍵信息,首先你得對要分析的性能問題有個基本的判斷,是CPU問題、內(nèi)存問題、啟動時間過長還是啟動失敗等等。有了發(fā)力的點才能從ETL文件中定位出有效的信息,我們也可以結(jié)合Xperf或wpaexporter導(dǎo)出的文本數(shù)據(jù)做更多自動化方面的事情。

本章完~

TMQ連接:http://tmq.qq.com/


TMQ(騰訊移動品質(zhì)中心)是騰訊最早專注在移動APP測試的團隊
我們專注于移動測試技術(shù)精華,飽含騰訊多款億級APP的品質(zhì)秘密,文章皆獨家原創(chuàng),我們不談虛的,只談干貨!

掃碼關(guān)注我們

掃一掃 關(guān)注TMQ
精彩分享不斷

總結(jié)

以上是生活随笔為你收集整理的QQ浏览器性能提升之路-windows性能分析工具篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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