转载自:http://blog.haoitsoft.com/index.php/archives/657

ASP.NET 性能监控工具和优化技巧

发表回复

为了阐明准确甄别性能问题的重要性,下面列举了一些导致Web应用响应慢的可能问题排查点:

  • JavaScript响应慢;
  • 资源加载中的产生了阻塞;
  • 用户端存在代理;
  • DNS问题;
  • ISP或网络问题;
  • 交换机和路由器;
  • 负载均衡器;
  • 应用代码(包括第三方软件库);
  • HTTP服务器(例如有时是ASP.net或IIS);
  • 第三方服务,例如:支付服务提供商、地图服务提供商等;
  • 子系统,包括:SQL Server、Redis、Elasticsearch、Rabbit MQ等。

还可以罗列出更多的性能问题排查点,这取决于需处理系统的复杂度和规模。在如此之多的系统组件都可影响性能优化问题的情况下,如何才能确诊性能问题呢?答案概括为一个词:数据。你需要来自于每个系统组件的、相关且有意义的数据。对于Web应用响应慢的问题,数据可以证明每个系统组件是对问题是有影响的还是完全无关的。

数据在手,就可以开始从上述列表中按你的思路去抽取问题排查点进行分析,这类似于在排序树中进行查找。每次在树中向下走一层,就越接近于性能问题的细节和实质,依次甄别性能问题是否存在于:

  • 客户端,服务器端或是两者之间的某处?
  • 响应慢的JavaScript、渲染或是资源阻塞?
  • 负载均衡器、Web服务器、任一子系统或是第三方软件?

在这样树中逐层下行时,性能问题会变得越来越清晰。对于每个层次上的问题排查点,定位性能问题所需的数据必须要与对应的问题精度相匹配。这时有必要去使用性能分析工具或SQL执行计划这样的工具。

例如在一个Web请求中,假定需要100毫秒的服务器处理时间和5秒的SQL查询时间。即使你可以将服务器处理时间优化到低于1毫秒,但是这对整体响应时间的改进很小,也就是从5.1秒变成5秒。改进SQL处理所需的5秒时间是潜在收益最大的优化。

架构问题

这种逐层厘清优化问题所在的自顶向下方法,对于局限在单一页面中的优化问题具有很好的效果。那么应用于跨越多个页面的优化问题上时效果又如何呢?例如,一些页面所存在的间歇性地打开慢问题,是由于子系统跟不上整体工作节奏,或是由于系统中存在某个再次重启可能就无法继续工作的老旧网络交换机。

这种情况下,侧重于应用的监控方法显示出它的局限性所在。这需要更多的软件层面和硬件层面上的指标,用于对系统中的每个组件进行评估。

在硬件层面,首先所能想到就是web服务器和数据库服务器,但它们只是冰山的一角。必须要识别和监控所有系统中的硬件组件,这包括:服务器、网络交换机、路由器、负载均衡器、防火墙、SAN等。

鉴于系统管理员的常规工作就是硬件监控,可能对于系统管理员而言上述的所有指标是显而易见的。但是这里有个重要警告:如果将这些硬件指标从软件指标中分离处理,那么从性能角度看所有这些硬件指标中的大部分是毫无用处的。换句话说,指标只有置于相应的环境中才能发挥最大作用。

例如,在一些情况下可能在数据库服务器上CPU占用率平均达50%是完全正常的,但是对于其它服务器而言这就是个定时炸弹。50%的CPU占用率,如果是在峰值时刻这意味着仍有很大空间去运行更繁重的任务。但如果是在闲暇时间段中而50%的CPU占用率频繁发生,这就意味着应用可能无法承受传入请求的突发峰值。

底线就是,为评估系统的健康度,CPU、内存和磁盘等全系统范围指标必须要与应用指标相关联。为给出更完全的系统健康状况视图,可以对请求吞吐量这样的应用指标和CPU占用率这样的系统指标进行可视化。

应用性能管理(Application Performance Management,APM)工具

APM工具提供数据采集、数据存储和数据可视化这些基础性操作。通常是由代理负责采集数据并将数据发送给数据存储,并使用Web界面以集中在Web请求上的仪表盘方式对数据进行可视化。

APM可用于:

  • 对Web应用性能做整体可视化;
  • 对特定的Web请求性能进行可视化;
  • 在Web应用性能变差时或者多个错误出现时,自动发送告警;
  • 在业务量大时,对应用的响应方式进行验证。

在这里给出了实例。

下面并非详尽地列出了支持对ASP.NET和IIS开箱即用的APM工具清单:

  • NewRelic APM
  • Application Insights
  • AppDynamics
  • Stackify

基础设施监控工具

基础设施监控工具在主机层面采集指标,这可更完整地反映性能。这些指标是在硬件和软件层面采集的。

  • DataDog
  • OpServer – Open Source

轻量级分析工具

轻量级分析工具为特定Web请求提供了高层次的指标,并在开发人员浏览Web页面时就可提供实时反馈。这些工具可用于所有的环境类型中(包括开发环境、QA验证、模拟环境、生产环境等),因此非常适合于对特定页面性能的快速评估。

与相应的具有完全功能的分析工具相比,轻量级分析工具的本质差异在于它们并非附属于过程,这意味着在使用轻量级分析工具时无需操心它们所产生的开销。

在开发环境中,轻量级分析工具对当前正编写的代码提供了实时反馈。这对于发现N+1或响应时间慢等问题是非常有用的,因为响应时间总是显示在页面的一角上。

  • 开源的MiniProfiler
  • 开源的Glimpse

用性能计数器填补空白

Windows系统中的性能计数器(Performance counter)提供了硬件和软件层次上不同方面的指标。监控工具通常以性能计数器为报告方式,例如CPU和内存占用情况。但是通常会缺失一些有用的计数器,例如垃圾回收时间等。最切实可行的入门方法是使用基本列表并在迭代中添加必要的相关计数器。此外,使用perfmon对性能计数器进行实时地采集和可视化是可行的。在很多情况下,将用户定制指标或插件与APM工具进行集成也是可行的。

SQL工具

由于在很多应用中普遍地使用了数据库,持久层(即SQL数据库)常常成为性能的瓶颈。用于SQL监控的专业工具可提供资源使用指标,以及一些特定的指标,例如等待时间、每秒编译次数等,在这里仅列举几个。

在提供下列数据情况下,可以发现一些类型的问题并可对性能进行改进:

  • 在一个或数个查询上存在过度的吞吐量;
  • 过度的CPU占用,这暗示了查询问题的存在或者是索引的缺失;
  • 可被缓存的高吞吐量查询。

SQL监控工具包括:

  • RedGate SQL Monitor
  • SQLSentry Performance Advisor

其它的持久系统

所有子系统都需要在某种程度上进行监控。对于低吞吐量或非关键的系统,简单的数据采集和可视化即足矣。在此外的情况下则需要更加高级的、专业的监控。

代码分析工具

当已确诊某个特定页面或代码段检测是响应慢的,代码分析工具可为性能问题鉴定提供最详尽的视图。代码分析工具还可为数据库查询和Web请求这样的外部调用提供了精准视图。

分析工具:

  • Redgate Ants
  • JetBrains dotTrace

内存分析工具

内存监控和垃圾回收指标有助于潜在问题的检测。但这些指标在显示了存在问题的同时,通常并未给出问题的所在。如果需要队内存和垃圾回收问题进行深入地探究,内存分析工具就可派上用场。

分析工具:

  • JetBrains dotMemory
  • RedGate Ants Memory Profiler

用户端分析工具

性能问题也可能来自于前端。当前这个问题十分常见,因为以JavaScript主导的单页应用的大量涌现。所有的主流浏览器都已嵌入了诸如代码分析和内存分析这样的工具。显示事件和请求的序列的工具有利于一眼就确定问题是源于前端还是后端。

工具:Tools:

  • Google Chrome Timeline
  • Firefox

页面分析工具

高层次客户端工具为发现并解决性能问题的提供了便利着手点。这些工具可以针对响应时间问题的产生根源提供高层次的视图,并给出一些相应的建议。例如Google的PageSpeed Insights就是这样的一个免费工具。

系统性能相关的因素和工具的数量是非常之多,这看上去似乎十分复杂。但是它们可以用一个词进行概括:数据。对系统有一个清晰的和准确的视图,这使得推理性能问题成为可能。这也使你可以在现场学习如何去解决性能问题,因为性能指标和图表将会引导你去发现到底是什么影响了系统性能。

转载于:https://www.cnblogs.com/xululublog/p/6656246.html

ASP.NET 性能监控工具和优化技巧相关推荐

  1. ASP.NET性能监控和优化入门

    \ 关键要点: \ 只有与应用指标相关联,基础设施指标才能最大发挥作用. \ 高效性能优化的关键在于性能数据. \ 一些APM工具为ASP.NET提供了开箱即用的支持,这样入门使用ASP.NET仅需最 ...

  2. 提高Web性能的前端优化技巧总结

    转载于:https://www.cnblogs.com/wangyayun/p/6472253.html

  3. ASP.NET比较常用的26个性能优化技巧

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  4. asp.net性能的技巧

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提 供了连接池 ...

  5. ASP.NET性能优化小结(ASP.NETC#)(转)

    原文转自:http://www.jb51.net/article/25937.htm 一.返回多个数据集  检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够 ...

  6. Asp.net性能优化-提高ASP.Net应用程序性能的十大方法

    一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...

  7. asp.net 性能优化细节

    asp.net程序性能优化的七个方面 (转) 2007-12-27 04:57 一.数据库操作 转自: http://www.itimes.com.cn/blog/205/look.aspx 1.用完 ...

  8. 优化 ASP 应用程序和 VBScript 的技巧。

    摘要:本文介绍优化 ASP 应用程序和 VBScript 的技巧. 目录 技巧 1:将经常使用的数据缓存在 Web 服务器上 技巧 2:将经常使用的数据缓存在 Application 或 Sessio ...

  9. 二十八条改善 ASP 性能和外观的技巧

    摘要:本文介绍优化 ASP 应用程序和 VBScript 的技巧. 目录 技巧 1:将经常使用的数据缓存在 Web 服务器上 技巧 2:将经常使用的数据缓存在 Application 或 Sessio ...

  10. asp mysql 性能_asp优化:最大限度优化你的Asp性能

    ASP 能快速执行你的动态网页,但你还可以通过紧缩代码和数据库连接以使它们执行更快.这是一篇关于怎样精简代码和Asp 特征以获得最快执行速度的详细文章.对于一个急燥的用户来说,任何在按下用户按钮到结果 ...

最新文章

  1. 单页面axios_Axios封装之取消重复请求和接口缓存
  2. CentOS7中使用yum安装Nginx的方法(亲测启动方法)
  3. 基于css3的鼠标滑动按钮动画之CSS--续
  4. CCFCSP 2018年9月 -- 部分题目
  5. linux buffer/cache手动释放
  6. Linux基础命令---accept打印机控制
  7. 转:Python 主进程被杀死时,如何保证子进程同时退出而不变为孤儿进程
  8. Opencv速成笔记--图像处理1
  9. python王者战斗_把英雄分类,看 Python 带你上王者
  10. Linux基础入门(详细版)
  11. uniapp小程序倒计时
  12. 线性回归模型之波士顿房价预测
  13. log4cxx vs2019编译
  14. 盘点世界十大软件外包公司排名是哪些公司
  15. canvas多彩粒子星空背景
  16. c 系统语言改为中文,主编设置win7系统英文版改成中文语言的操作技巧
  17. which语句c语言例子,用which引导的定语从句讲解和句子举例
  18. 用view-source:查看网页源代码
  19. 计算机运算器发展趋势,2020计算器市场发展现状及及前景分析
  20. 社恐怎么办?这个漫画或许能治愈你

热门文章

  1. 【算法学习】将MSRCR中的模糊处理由FFT修改为时域纯高斯模糊
  2. 【数码管识别】4识别成5或7的问题
  3. python3及wxpythonGUI多线程防假死与线程消息传递消息(最新)
  4. 相关系数法程序设计 opencv C++ CSU
  5. IDL实现高分一号数据辐射定标TASK(二)
  6. gdal 使用 无法解析的外部_【小马哥学习笔记】STM32G071 PD0 PD2引脚使用注意事项...
  7. Scala基础-01-Scala环境安装及基础语法(变量,函数)
  8. Okhttp之CallServerInterceptor简单分析
  9. 再见,2016,你好,2017
  10. docker多个mysql实例_Docker创建运行多个mysql容器的方法示例