一、前言
1 背景
客户端优化分析,需要采集数据,对比竞品;用什么工具(方法)采集数据,如何绘图对照呢?你给出的CPU/内存测试结果,和其它测试电脑上表现不一致啊,怎么办?又要手动记录任务管理器进程信息,写入excel生成曲线图吗?
然后,发现了客户端确实存在着问题,比如内存上涨过多、CPU占用高于竞品;如何进行工程诊断,最好具体到函数调用栈呢?
然后,如何深入竞品的行为分析呢?
2 策略
针对应用优化不同阶段,策略如下:
本文基于应用优化的背景,逐点介绍下各个策略对应的工具(方法)及其使用。
二、数据采集
“性能监视器”,基本可以满足windows上应用各项数据的采集、绘制、对比。
1 工具启用
如小标题所示,就是我要介绍的这个工具,打开它:
Win + R 输入命令“perfmon”
或者
搜索框搜“性能监视器”。
看下性能监视器概述吧,接下来具体讲下操作。
2 实时监测
监视工具——性能监视器,默认可以看到系统总的CPU占用百分比(%Processor Time)。
工具栏中可以修改 性能监视器 属性、图形类型(线条、直方图条、报告)、添加/删除监视对象(指定某进程或系统)。
其中,属性可以修改图中数据的来源(实时数据改为用户保存数据)、数据比例(比如内存大小,以BYTE作为单位数值太大,可以按比例减小数值)、曲线颜色/宽度/样式等,还可以增加标题、坐标轴标题、显示垂直/水平格线等。
关于添加监视对象,既可以是本地计算机(或所属进程),也可以是拓扑内能访问到的计算机,比如选择监视类型为CPU占比,指定如下:
点击 添加,然后 确定 即可。
通过上述“性能监视器”,在下方监视对象列表选中一个对象,可以右键导出当前截图,但不能保存当前计数器(指定监视对象、数据类型)数据。通过左侧列表第2个选项“数据收集器集”,能够保存自定义的监视对象数据。
3 数据收集
首先,需要右键“数据收集器集”——“用户定义”,点击“新建”——数据收集器集,可以选择“手动创建”,
然后,可以选择“创建数
据日志”,勾选“性能计数器”,添加指定名称类型的监视对象。
示例间隔建议改成1秒,默认15秒跟你在资源管理器或者一般想要绘制的曲线图直观感受上不一致。
上面一顿操作后,你就创建好了你的数据收集器集,可以右键“开始”或“停止”,
每次“停止”,都会在左侧第3条下属目录中生成1条新的报告:
与“性能监视器”不同,在“数据收集器集”报告中,你还能额外以“区域”、“堆积面积图”形式查看你的数据,“特别适合”(个人体验)展示内存上涨,如下:
你甚至能从本地或他人计算机,拷贝(剪切)数据,
从此,可以在不同电脑间直接拷贝测试数据,你可以进行下面讲的“数据对比”。
4 数据对比
有多个应用的CPU占用数据需要分析,最好是绘制到同1张图上,这样可以清晰的看到应用之间的差异。比如下面这样:
不同应用、计数器,可以设置不同的颜色加以区分。
但是要想将不同应用的数据呈现到同一张图进行对比,似乎不是显而易见的事。观察到性能监视器图形中横坐标会发现,要想将两个应用的CPU占用率摆在一起形成对比,得保证时间段一致。难道要同时操作两个应用?
或许对于那种操作稳定的功能(启动、退出、拉流等),可以同时操作;但如果要监测稍微复杂的操作,比如列表的手动下拉、窗口数量的切换,同时操作就不太科星。
在实际使用中,通过修改Windows系统时间,分别对不同应用进行操作,这样收集到的监测数据的时间段就是一致的。
三、工程诊断
Visual Studio的诊断工具非常强大,可以清晰的看到具体函数栈CPU占用、内存申请,可以截取快照对比不同时刻的CPU/内存差异。
1 工程升级
如果你的Visual Studio项目停留在2015以前,可能就无法充分利用诊断工具,比如堆栈分析。
关于如何升级到Visual Studio2015以及相关问题,可以在博文下评论交流。
2 内存监测
观察内存曲线
3 CPU监测
观察CPU曲线
4 内存快照
截取当前内存状态,可以截取N个快照,随意选取其中两个状态进行对照。
5 CPU快照
中断程序后,在CPU监测曲线上任意选取某时刻,可以查看该时刻各函数占用CPU时间和百分比。
6 堆分析
6.1 堆栈视图
查看内存上涨调用栈
6.2 类型视图
查看内存上涨类型
我在另1篇博文里详细讲述了Visual Studio诊断工具的使用 。
四、行为分析
Process Hacker是一款针对高级用户的安全分析工具,它可以帮助研究人员检测和解决软件或进程在特定操作系统环境下遇到的问题。除此之外,它还可以检测恶意进程,并告知我们这些恶意进程想要实现的功能。
这里讲的应用行为分析,包括线程情况、系统API调用栈、dll依赖情况、文件读写、网络请求等。Process Hacker作为一个开源项目,对上述需求提供了全面的支持。
1 下载/安装工具
官网链接:
https://processhacker.sourceforge.io/
可以上官网下载安装包
Github地址:https://github.com/PKRoma/ProcessHacker
可以下载源码,提供Visual Studio工程文件,目前已升级至Visual Studio 2022
2 观察各项属性
在“Processes”页面,双击指定应用(比如EzvizStudio.exe),可以看到应用的各项属性,包括handle、线程、系统API调用栈、GPU、磁盘、网络、内存、环境变量、依赖dll等。
2.1 属性界面
2.2 线程界面
2.3 依赖dll
3 网络通信/请求
想观察竞品应用网络请求的起始IP、端口、协议、状态等,可以打开“Network”窗口
4 文件读写/加载
想观察竞品应用数据库位置、文件读写、动态库加载情况,可以打开“Disk”窗口(需要重启Process Hacker)