【性能诊断】三、单功能场景的性能分析(RedGate Profiler)
上一篇我们简单的对客户前端和数据库后端的性能问题进行了定位,如果排除了这两块,问题基本就确定在应用服务器上。但是我们往往对应用服务器,或者说应用程序的性能最陌生,一旦出现性能问题往往有无所适从的感觉,虽然我们的对应用程序的代码最熟悉。
原因有这么几项:
- 系统庞大、业务复杂时,如果从代码审查入手,主观性因素影响较大;如果在各处代码中增加log统计响应时间,很不方便、也不科学,且工作量很大;
- 自己维护的代码调用了其他模块的接口,无从下手;与其他模块同事交流时,描述复杂、沟通困难;
- Oracle环境不方便跟踪SQL脚本的执行记录,Sqlserver虽然能够做到到,但跟踪到其他模块的SQL也不知道是哪个方法调用的;
基于这些原因,另一个强大的工具诞生了---ANTS RedGate Performance Profiler
下载地址:http://www.red-gate.com/products/
RedGate与VS自带的分析工具对比
Visual Studio Performance Profiler
Visual Studio 分析工具的采样分析方法按设置的时间间隔中断计算机处理器并收集函数调用堆栈。
1.专用术语太多,分析报告不易理解
2.操作复杂、与VS集成
3.不能将SQL执行、文件操作同步抓取分析
RedGate Performance/Memory Profiler
RedGate基本工作原理是在.NET编译出的IL代码里放入钩子用来记录时间,然后通过直观的界面显示出哪部分代码耗能最大。
1.可视化界面、操作简洁,直观的展现系统的性能响应与内存分配情况;
2.能够捕捉到SQL脚本与执行时间,SQL与.NET代码关联切换;
3.可以针对指定线程进行特定分析,便于快速定位问题;
使用示例
启动Performance,注意再测试时使用新的Profile端口。

使用鼠标选中指定时间区间后,redgate自动会进行分析,缺省我们看到的是Call Tree视图,此处我们注意三点:
- Call Tree显示该时间段内进程的线程调用堆栈和对应的CPU消耗及方法调用次数;可以推测出循环、递归等代码;
- 此时我们看到的是CPU执行时间占比(或执行时间),不包含SQL执行、网络、文件等IO阻塞的等待时间;
- 如果是debug的dll又有对应的pdb文件,选中指定方法,可以直接查看到源代码;

切换到Method grid, 按照方法执行的总时间倒序,不考虑调用关系;利用隐藏指定命名空间(或仅显示指定命名空间),可以方便查找并突出问题;

Database calls视图 展示所有的数据库SQL访问,缺省按执行时间倒序,SQL脚本后面有.NET图标,可以快速定位到该SQL的程序调用堆栈;Call tree中的SQL脚本图标,同样可以快速返回到Database calls界面;

另外,为选中区域命名,方便后期分析,提高工作效率;当后台处理较复杂,如使用了多线程,或者一个功能对应很多http请求时,可以按指定线程分析问题;
介绍类的内容就不做过多的介绍了,下一篇会以一个例子,使用redgate诊断一个刚接触貌似很诡异问题。
【性能诊断】三、单功能场景的性能分析(RedGate Profiler)的更多相关文章
- 【性能诊断】二、单功能场景的性能分析(fiddler、SQL Profiler)
Fiddler fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测 ...
- 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)
问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...
- Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- c#之冒泡排序的三种实现和性能分析
冒泡排序算法是我们经常见到的尤其是子一些笔试题中. 下面和大家讨论c#中的冒泡排序,笔者提供了三种解决方案,并且会分析各自的性能优劣. 第一种估计大家都掌握的,使用数据交换来实现,这种就不多说了,园子 ...
- [C#] 网站程序ASP.NET的性能诊断 - CPU分析
微软提供了标准的CLR性能分析类库 https://github.com/Microsoft/clrmd 这个类库是开源的代码.能够获取CLR runtime里面几乎所有的信息. 如何获取clrmd编 ...
- 通过 Javacore 诊断线程挂起等性能问题
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy_jav ...
- [翻译]60,000毫秒内对Linux进行性能诊断
原文链接:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html 原文作者:Brendan Gregg,L ...
- (转)通过 Javacore 诊断线程挂起等性能问题
原文:https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy ...
随机推荐
- 为什么有的代码要用 base64 进行编码
一.1.传输信道只支持ASCII字符,不方便传输二进制流的场合. 2.含有非ASCII字符,容易出现编码问题的场合. 3.简易的掩人耳目.至少非开发人一眼看不出来是啥. 二.Base64主要用于将不可 ...
- 圆角button
方案1: <Window.Resources> <ControlTemplate x:Key="CornerButton" TargetType="{x ...
- LeetCode Binary Tree Right Side View (DFS/BFS)
题意: 给一棵二叉树,要求收集每层的最后一个节点的值.按从顶到底装进vector返回. 思路: BFS比较简单,先遍历右孩子就行了. /** * Definition for a binary tre ...
- Think Python - Chapter 18 - Inheritance
In this chapter I present classes to represent playing cards, decks of cards, and poker hands.If you ...
- ajax 轮循
使用 AJAX 进行异步加载轮询操作.简单代码如下: <script> // 执行ajax轮循操作 function polling(){ var xmlhttp; // 判断浏览器--创 ...
- Java 抓取网页内容
前两天想写一段自动提取微博状态的代码.据我所知,实现这个功能即可以用PHP写,也可以用Java写.我认为用Java写调试方便一点,PHP的脚本还要上传到服务器什么的. 代码很简单的,新建一个java. ...
- linux下c语言实现计算磁盘剩余空间
#include <sys/statfs.h> unsigned ; size_t mbFreedisk = ; unsigned ; size_t mbTotalsize = ; str ...
- min-height for IE6
1. className{ min-height:500px; height:auto !important; height:500px; } 2. 在做页面布局时遇到了i ...
- java编程之:生成rsa密钥
通过openssl工具生成RSA的公钥和私钥(opnssl工具可在互联网中下载到,也可以点此下载无线接口包,里面包含此工具) 打开openssl文件夹下的bin文件夹,执行openssl.exe文件: ...
- Hive 安装配置记录
http://yymmiinngg.iteye.com/blog/708230 export HADOOP_HOME_WARN_SUPPRESS=1 export JAVA_HOME=/home/ha ...