参考:
https://www.pianshen.com/article/4385736680/
https://blog.csdn.net/Pig_Pig_Bang/article/details/81068888
https://blog.csdn.net/Pig_Pig_Bang/article/details/81284122
https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/
win10版的winsdksetup.exe和adksetup.exe不适用2008R2、适用≥2012R2,使用winsdksetup.exe和adksetup.exe都能在≥2012R2系统上安装Windows Performance Toolkit(含wpr.exe命令)。2008R2或Win7只能使用Windows 8.1 SDK,云服务器上WPT(wpr和wpa)跟实体物理机上的表现可能会有差异。
winsdksetup.exe
https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk/
adksetup.exe
https://docs.microsoft.com/zh-cn/windows-hardware/get-started/adk-install
我研究了WPR,它的最小时间单位是0.1微秒,即10000个单位是1毫秒,精细度非常高,所以用它研究一些性能问题
安装过程如下
下载winsdksetup.exe或adksetup.exe
先运行安装文件进行下载,下载时只勾选Windows Performance Toolkit和dotnet即可,下载相关文件到默认目录C:UsersAdministratorDownloadsWindows Kits10WindowsSDK,然后再进到这个目录进行安装,安装的时候只安装Windows Performance Toolkit
C:UsersAdministratorDownloadsWindows Kits10WindowsSDK
安装成功后在开始菜单找到Windows Performance Recorder,可以在图形界面上点鼠标,也可以通过命令行方式操作,其官网文档的命令行demo较少,目前比较实用的就是CPU监控部署
我命令行调用WPR写了个for循环,1分钟写一个监控文件,到60次结束后计数器重置为0,$times继续 ,目前已经循环了一个小时,完全符合我的预期,如果不通过循环覆盖,1小时就得写10TB左右的量,内存和硬盘肯定存不下。
for($times=1;$times -le 60;$times )
{
wpr -start cpu -instancename CpuSession;
Start-Sleep -seconds 60;
wpr -stop c:cpu$times.etl -instancename CpuSession;
if($times -eq 60) {$times=0}
}
核心代码就上面几行,后来我搞了几版完善健壮性,V3版是比较OK的版本。
使用说明:脚本运行起来不要关窗口直到你收到告警(比如用户自建数据库集群发生高可用切换时他会收到告警),这个时候就可以上机关掉脚本运行的窗口结束循环了,但是结束之前的最后一个循环节只执行了wpr -start,还没执行stop,需要你手动执行wpr -stop cpu.etl -instancename CpuSession把WPR彻底关停后再做分析。
如果执行过程中的屏显日志需要采集,可以重定向到一个txt文件。