搜索
首页后端开发C#.Net教程ASP.NET性能监控及其优化入门

 关键要点:

  • 只有与应用指标相关联,基础设施指标才能最大发挥作用。

  • 高效性能优化的关键在于性能数据。

  • 一些APM工具为ASP.NET提供了开箱即用的支持,这样入门使用ASP.NET仅需最小限度的初始设置。

  • 代码分析工具为程序性能给出了最为详尽的视图。

  • 轻量级分析工具给出了网页性能的实时视图,可用在开发环境和生产环境中。

  “这个网页打开太慢了!”,对Web网站这样的抱怨是经常性的和普遍性的,尤其是自从Web应用开始逐渐替代桌面应用以来。虽然Web带来了全球交付这样的理想特性,但是也在性能层面带来了相应的挑战。

 数据采集与使用的基本原理

  用户给了你一个“龟速”网页的url,那好,你该怎么做呢?网页打开慢的问题是源自于哪里?是一开始就是这么慢吗?是对所有用户都很慢吗?要解决网页打开慢的问题并且确保在一周后不会再次变慢,有许多诸如此类的问题需要得到解决。

  虽然在网上可以搜索到一些性能优化的资料,但它们通常都是关于Jit、垃圾回收、SQL查询优化、ORM陷阱等这样一些特定主题的。考虑到实现优化的美好前景是诱人的,这里冒出了这样的一个问题:针对当前的性能问题,如何知道所选定的优化方法将会切实地产生好的结果?

  无疑在这个工作中的某一环是有所缺失的。我们需要能可持续地找到性能问题所在的方法。通过使用该方法,我们能发现系统中较慢的部分,并有切实措施支持我们对性能问题的诊断。掌握了性能问题所在,我们就可以进一步地确定是否需要进行性能改进,并对利益相关者解释所有这一切。

  对于所发现的上述性能问题,进行准确地甄别是更有效的处理方法。问题在一开始可能并非是一个网页加载慢的问题。在存在超时的情况下(例如负载均衡器可能几秒后才会为连接提供服务),完全无法被区分开这是一个死锁问题或是响应时间慢的问题,因为这两个问题导致了同样的结果,就是产生了超时。这需要数据去找到导致问题的真正原因。

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

  • JavaScript响应慢;


  • 资源加载中的产生了阻塞;


  • 用户端存在代理;


  • DNS问题;


  • ISP或网络问题;


  • 交换机和路由器;


  • 负载均衡器;


  • 应用代码(包括第三方软件库);


  • HTTP服务器(例如有时是ASP.net或IIS);


  • 第三方服务,例如:支付服务提供商、地图服务提供商等;


  • 子系统,包括:SQL Server、Redis、Elasticsearch、Rabbit MQ等。

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

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

  • 客户端,服务器端或是两者之间的某处?


  • 响应慢的JavaScript、渲染或是资源阻塞?


  • 负载均衡器、Web服务器、任一子系统或是第三方软件?

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

  为有效地利用时间,很有必要重申一下Amdahl定律:

无论一个任务改进的程度如何,该任务中没有从改进中受益的部分限制了理论上的任务加速。

  例如在一个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就是这样的一个免费工具。

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

以上是ASP.NET性能监控及其优化入门的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Laravel开发建议:如何进行性能监控与优化Laravel开发建议:如何进行性能监控与优化Nov 22, 2023 pm 06:14 PM

Laravel开发建议:如何进行性能监控与优化在当今的Web应用开发中,性能是一个非常重要的考虑因素。一个高效的应用不仅能提供更好的用户体验,也能降低服务器的负载并节省成本。本文将向您介绍一些针对Laravel应用程序的性能监控和优化建议。使用性能监测工具Laravel提供了一些非常有用的性能监测工具,比如LaravelDebugbar和LaravelT

Java开发中常见的性能监控和调优工具Java开发中常见的性能监控和调优工具Oct 10, 2023 pm 01:49 PM

Java开发中常见的性能监控和调优工具,需要具体代码示例引言:随着互联网技术的不断发展,Java作为一种稳定、高效的编程语言,在开发过程中得到广泛使用。然而,由于Java的跨平台性以及运行环境的复杂性,性能问题成为开发中不可忽视的一个因素。为了保证Java应用程序的高可用性和快速响应,开发人员需要对性能进行监控和调优。本文将介绍一些常见的Java性能监控和调

Laravel中间件:为应用程序添加数据库查询和性能监控Laravel中间件:为应用程序添加数据库查询和性能监控Jul 28, 2023 pm 02:53 PM

Laravel中间件:为应用程序添加数据库查询和性能监控导言:在开发Web应用程序时,数据查询和性能监控是非常重要的。Laravel提供了一种方便的方式来处理这些需求,即中间件。中间件是在请求和响应之间进行处理的一种技术,它可以在请求到达控制器之前或响应返回给用户之后执行一些逻辑。本文将介绍如何使用Laravel中间件来实现数据库查询和性能监控。一、创建中间

php-fpm性能监控与调优策略php-fpm性能监控与调优策略Jul 07, 2023 am 08:39 AM

php-fpm性能监控与调优策略引言:随着互联网的发展,PHP作为一种高效的服务器端脚本语言,被广泛应用于Web开发领域。而php-fpm作为php运行环境的一种解决方案,具有较高的并发处理能力。然而,在高并发的情况下,php-fpm会面临性能瓶颈的问题。本文将介绍php-fpm的性能监控与调优策略,旨在提高php-fpm的性能和稳定性。一、php-fpm性

MTR:结合MySQL测试框架进行数据库性能监控与调优的实践经验MTR:结合MySQL测试框架进行数据库性能监控与调优的实践经验Jul 13, 2023 am 10:34 AM

MTR:结合MySQL测试框架进行数据库性能监控与调优的实践经验引言:在开发和维护复杂的应用程序时,数据库的性能监控与调优是至关重要的。MySQL是广泛使用的关系型数据库之一,它具有成熟的性能监控与调优工具,其中MTR(MySQLTestRun)框架是非常有用的工具之一。本文将介绍如何结合MTR框架进行MySQL数据库的性能监控与调优,并提供一些实践经验

UniApp实现性能监控与瓶颈分析的最佳实践UniApp实现性能监控与瓶颈分析的最佳实践Jul 04, 2023 am 08:46 AM

UniApp实现性能监控与瓶颈分析的最佳实践随着移动应用的快速发展,开发人员对应用性能的需求也日益增加。对于UniApp开发者来说,实现性能监控和瓶颈分析是非常重要的一项工作。本文将介绍UniApp中实现性能监控和瓶颈分析的最佳实践,并提供一些代码示例供参考。一、性能监控的重要性在现代移动应用中,用户体验是非常重要的。性能问题会导致应用加载速度慢、卡顿等问题

如何使用Linux进行系统性能监控和优化如何使用Linux进行系统性能监控和优化Aug 02, 2023 pm 05:33 PM

如何使用Linux进行系统性能监控和优化引言:Linux是一种开源的操作系统内核,被广泛应用于各种服务器和嵌入式设备中。在使用Linux操作系统的过程中,对系统性能进行监控和优化是非常重要的。本文将介绍如何使用Linux提供的工具来监控系统性能,并通过分析和调优来提升系统性能。一、系统性能监控工具Linux操作系统提供了丰富的性能监控工具,下面列举一些常用的

Nginx负载均衡方案的性能监控与自动化报警Nginx负载均衡方案的性能监控与自动化报警Oct 15, 2023 pm 02:47 PM

Nginx负载均衡方案的性能监控与自动化报警引言:随着互联网应用规模的不断扩大,负载均衡在网络架构中的重要性也越来越凸显。Nginx作为一款高性能的Web服务器和反向代理服务器,广泛应用于各个规模的网站和应用中,具备卓越的负载均衡能力。为了确保负载均衡策略的有效运行以及提高应用的可用性和性能,我们需要对Nginx的性能进行监控,并及时发出自动化报警。本文将介

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境