查看原文
其他

ASP.Net性能监控和优化入门

傅雨斌 翻译 新钛云服 2022-01-05

“这个网页很慢”“这个网页访问不通”是关于网站经常的抱怨,特别是因为Web应用程序开始取代桌面应用程序。虽然网络带来了一些理想的特征,如全球交付,但它也在性能水平上带来了一些挑战。


收集和使用数据背后的基本原理

用户提交了“慢”网页的网址的问题。好的,现在怎么样?缓慢来自哪里?它实际上很慢吗?对所有用户来说都很慢吗?这里要回答很多问题来解决这个问题,并确保一周后它不再变慢。


我们可以在线找到性能优化材料,通常是关于特定主题,如Jit,垃圾收集,SQL查询优化,ORM陷阱等。尽管实施优化很有吸引力,因为它看起来很有前途,但是会出现一个问题:我们如何知道这种优化实际上会在处理缓慢问题中产生良好的结果?


显然,缺少一块拼图。我们需要一种能够持续发现性能问题的方法。这样,我们知道什么是缓慢的,并采取具体措施予以支持。有了这些知识,就可以准确地确定是否需要改进性能并向利益相关者解释。


准确识别性能是一种更有效的方式来响应感知的缓慢问题。第一个问题是它可能不是一个缓慢的问题。在超时的情况下(例如,负载平衡器可能在X秒后切断连接),很明显无法区分死锁或慢响应时间,因为结果将是相同的,即超时。需要数据才能找到真正的问题。

为了说明精确识别性能问题的重要性,以下是Web应用程序中一些可能的缓慢点:


  • 慢JavaScript

  • 渲染加载妨碍品质

  • 用户端的代理阻碍

  • DNS问题

  • ISP问题/网络

  • 交换机和路由器

  • 负载均衡器

  • 应用程序代码(包括第三方库)

  • HTTP服务器(例如,来自ASP.NET或IIS的东西)

  • 第三方服务,如支付处理器,地图提供商等。

  • 子系统,如SQL Server,Redis,Elasticsearch,Rabbit MQ等。


根据自身问题处理的复杂性和规模,列表会继续。如此多的组件在运行时如何诊断性能问题?一个字:数据。所以需要关于一切的相关,有意义的数据。可以证明涉及缓慢请求的系统的有问题或无问题的数据。


掌握数据后,我们可以从顶部开始,随时从列表中删除组件,类似于在排序树中执行搜索。每一步都让你更接近细节和实际问题:


  • 客户端,服务器端还是介于两者之间?

  • 缓慢的Javascript渲染,妨碍了品质?

  • 负载均衡器,Web服务器,任何子系统或第三方?


无论改进的程度如何,任务的理论加速总是受到无法从改进中受益的任务部分的限制。

例如,假设我们有一个Web请求需要100ms的服务器处理和5秒的SQL查询。即使将服务器处理时间降至1毫秒,整体改进在响应时间方面也是微不足道的,从5.1秒到5秒。SQL处理的5秒是潜在收益最高的地方。


基础架构问题

一种自上而下的方法,即越来越精确地识别问题,在本地化到单个页面的问题的上下文中很好地工作。产生多个页面的问题怎么样?例如,如果由于子系统无法跟上而导致各种页面出现间歇性的慢响应时间,或者每次重启可能是最后一次的古董网络切换,该怎么办?
这是专注于应用程序的监控方法显示其局限性的地方。在此级别,需要其他指标来评估系统中每个组件(包括软件和硬件级别)的健康状况。


在硬件级别,首先想到的是Web和数据库服务器。然而,这些只是冰山一角。必须识别和监控所有硬件组件:服务器,网络交换机,路由器,负载平衡器,防火墙,SAN等。

所有这些对于系统管理员来说似乎都很明显,因为硬件监控是一种常见做法。但是,有一个重要的警告:如果它们与应用程序指标分开,那么所有这些硬件指标在性能观点上大多无用。换句话说,指标在放入上下文时最有用。


例如,数据库服务器上平均50%的CPU使用率在某些情况下可能是完全正常的,而在其他情况下则是滴答作响的定时炸弹。在高峰时段,50%的CPU使用率表明仍有一些空间可容纳更大的流量。如果在空闲期间频繁发生相同的50%,则表明应用程序不太可能在突然的传入请求高峰期内存活。


底线,系统范围的指标(如CPU,内存和磁盘)必须与应用程序指标相关联,以确定系统健康状况。能够可视化应用程序指标(如请求吞吐量和CPU使用率等系统指标),可以更全面地了解系统的健康状况。


应用程序性能管理(APM)工具

APM工具提供以下基本操作:数据收集,数据存储和数据可视化。代理通常负责收集数据并将其发送到数据存储。使用Web界面,可以通过以Web请求为中心的仪表板显示数据。

APM工具对以下方面很有用:


  • 可视化Web应用程序的整体性能

  • 可视化特定Web请求的性能

  • 当Web应用程序执行不良或有太多错误时自动发送警报

  • 验证应用程序在高流量时段的响应方式


以下是APM工具的非详尽列表,其中包含对ASP.NET和IIS的开箱即用支持:


  • NewRelic APM

  • Application Insights

  • AppDynamics

  • Stackify


基础架构监控工具

为了提供完整的图片,基础架构监控工具在主机级别收集指标。在硬件和软件级别收集度量标准。


  • DataDog

  • OpServer--开源


轻量级分析器

轻量级分析器提供特定Web请求的高级指标。他们在浏览网页时向开发者提供即时反馈。它们可用于所有类型的环境(开发,QA,分段,生产等),使其非常适合快速评估特定页面的性能。


轻量级分析器与其完全相同的对应物的根本区别在于它们不依赖于该过程。这意味着可以使用它们而不必担心它们产生的开销。


在开发环境中,轻量级分析器可以为您当前编写的代码提供即时反馈。这对于查找N + 1或响应时间较慢等问题特别有用,因为你始终在页面的一角显示响应时间。


  • MiniProfiler--开源

  • Glimpse--开源


Windows中的性能计数器在硬件和软件级别提供不同方面的指标。监视工具通常会报告一些性能计数器,例如CPU和内存使用情况。但是,一些有用的计数器(如GC时间)通常会丢失。最实用的入门方法是使用基本列表并迭代,根据需要添加相关计数器。


可以使用perfmon实时收集和可视化性能计数器。在大多数情况下,使用自定义指标或插件也可以与APM集成。


SQL工具

持久层,即SQL数据库,由于其在大多数应用程序中的无所不在而成为常见的瓶颈。用于SQL监视的专用工具提供了有关资源利用率的指标以及特定指标,例如等待时间或编译/秒,仅举几例。


可以使用提供的数据找到几种类型的问题以及可能的性能改进:


  • 一个或多个查询的吞吐量过大

  • 过多的CPU使用率暗示查询问题或缺少索引

  • 可以缓存的高吞吐量查询

  • SQL监控工具:

  • RedGate SQL监视器

  • SQLSentry Performance Advisor


其他持久性系统

所有子系统都需要在一定程度上进行监控。简单的数据收集和可视化可能足以满足低吞吐量或非关键系统的要求。在其他情况下,他们需要更先进的专业监控。


代码分析器

当特定页面或代码片段被识别为慢时,代码分析器提供最详细的视图以识别性能问题。它们还提供外部调用的精确视图,例如数据库查询和Web请求。


分析器:

  • Redgate Ants

  • JetBrains dotTrace


Memory Profiler

监视内存和垃圾收集指标对于检测潜在问题很有用。虽然表明存在问题,但通常很难定位。当需要深入研究内存和垃圾收集问题时,内存分析器会派上用场。


分析器:

  • JetBrains dotMemory

  • RedGate Ants Memory Profiler


客户端分析器

性能问题也可能来自前端。随着Javascript为主的单页面应用程序的出现,情况更是如此。所有主流浏览器都嵌入了工具,例如代码分析器和内存分析器。


显示事件和请求序列的工具可以一目了然地确定问题是来自前端还是后端。


工具:

  • Google Chrome Timeline

  • 火狐浏览器


页面分析器

更高级别的客户端工具是性能故障排除的便捷起点。这些工具可以提供响应时间问题来源的高级视图,以及一些建议。Google的PageSpeed Insights是此类工具的一个免费示例。

系统性能所涉及的众多因素和工具似乎势不可挡。然而,它可以用一个词来概括:数据。在给定时间清晰准确地查看系统可以推断其性能。它还可以实现及时学习,其中性能指标和图表可以指导您了解影响系统的因素。


原文地址:https://www.infoq.com/articles/dotnet-performance-monitoring-optimization

原文作者:Pierre-Luc Maheu


精品好文:


了解新钛云服

新钛云服CEO冯祯旺受邀在2018首席技术官领袖峰会主会场发表演讲

新钛云服CEO冯祯旺受邀出席华东互联网峰会并发表演讲

从盛大游戏G云COO到独自创业!2018中国财经峰会专访新钛云服CEO冯祯旺

刚刚,新钛云服荣获中国财经峰会2018最具投资价值奖!

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

王者归来,Linux运维专家胥峰加入新钛云服!


技术干货

99%运维不知道,系统文件md5变了,竟然是因为......

超实用,物理服务器RAID扩容详解

OpenStack Rocky:专注于裸机云管理,快速升级以及硬件加速

Chef进行自动化和编排的优缺点分析

高效的容器使用需要软件定义的数据中心

Ceph BlueStore 与 FileStore:利用 Micron NVMe SSD 进行性能比较

django快速上手指南

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

清单管理在运维服务中的实践

孩子通CTO李文杰:孩子通运维2.0的升级之路。

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

运行Docker:物理机vs虚拟机,五方面详细对比!

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存