22 Star 38 Fork 16

FastDev / OF.Moniter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 3.47 KB
一键复制 编辑 原始数据 按行查看 历史
FastDev 提交于 2016-05-29 17:21 . Update README.md

#OF.Moniter

** 一、描述** 本项目使用了微软提供的类库 mdbgeng 用于实时 Dump .Net 应用的调用堆栈,并且提供了一个程序用于分析 调用堆栈,对相同线程、相同调用堆栈的调用进行分组,从而帮助找出系统中调用次数最多、耗时最长的调用。 每次 Dump 应用都会生成独立的文件,分析程序一次可以分析 Input 目录下的所有文件,并且按照线程和调用堆栈 进行分组。出现在不同文件的同一方法说明这个方法耗时近似于多次Dump的时间间隔。

** 二、程序说明** 一共3个项目,一个类库文件,一个Dump调用堆栈的Console程序,一个用于分析Dump输出文件的Console程序。其中 Dump 调用堆栈的程序需要根据目标系统的类型编译为 64位 或者 32位版本,并且运行的时候需要以管理员权限运行,否则会收到报错信息。

三、如何测试Dump进程的项目:

1、运行一个.Net 目标程序,比如 asp.net 的网站或者 Console 的程序。

2、查看 .Net 程序的进程 Id。(如果是asp.net 的应用需要查看对应的 w3wp进程的id)。

3、将进程Id配置到 OF.Moniter.exe.config 的 PID 字段中。

4、确保 OF.Moniter.exe 所在的文件夹下面有个** Input **文件夹,输出文件默认会放在里面。另外,需要确保目标.Net 程序和 OF.Moniter.exe 的 运行平台相同,即都是32位的或者都是64位的,如果不相同,需要在"项目属性>生成>目标平台" 那里选择 x86 或者 x64 重新编译 OF.Moniter。 5、以管理员权限运行 OF.Moniter.exe 即可将 PID 对应的那个进程的调用堆栈打印出来。

A.如果运行的时候报下面的错误,说明目标进程的 .Net 平台同 OF.Moniter.exe 的不一致,需要重新编译项目为 32 位平台或者 64位平台的 才行。

_未经处理的异常: System.Runtime.InteropServices.COMException: 由于调试对象和调试器位于不兼容的平台上,所以操作失败。 (异常来自 HRESULT:0x80131C30) _

B.如果运行的时候报 “未经处理的异常: System.ArgumentException: 值不在预期的范围内。”,可能是PID配置的进程找不到、对应的进程 不是.Net程序或者目标.Net程序已经运行结束。

** 需要注意的是Dump程序调用堆栈的时候不要关闭 OF.Moniter.exe 程序,否则会把目标进程也关掉。**

四、如何测试分析Dump文件的项目:

1、把前面一步中Dump生成的文件拷贝到 OF.Moniter.Analysis.exe 进程所在目录的** Input** 子目录中,然后运行 OF.Moniter.Analysis.exe 即可。

2、运行的过程会遍历 Input 子目录下的所有文件进行处理,结果以文本形式打印在控制台输出,大家可以根据需要重定向到文本文件进行查看。输出 分为两部分,第一部分按照调用方法的次数进行降序排列,第二部分会按照进程.调用堆栈进行分组,根据对用堆栈重复次数和深度求一个权值降序排列。 输出的结果中会打印某个进程的某个调用堆栈上的方法出现的次数。比如某个进程运行了一个比较大的查询,第一次dump的时候调用堆栈是 A->B->C, 第二次dump时候调用堆栈是 A->B,那么分析的结果里面对用堆栈中 A->B->C 中 A 会标记为2次,B标记为2次,C 标记为1次。说明这个进程 A 方法和 B方法耗时在两次 dump 之上。

C#
1
https://gitee.com/fastdev/OF.Moniter.git
git@gitee.com:fastdev/OF.Moniter.git
fastdev
OF.Moniter
OF.Moniter
master

搜索帮助