Windows性能计数器监控实践

Windows性能计数器(Performance Counter)是Windows提供的一种系统功能,它能实时采集、分析系统内的应用程序、服务、驱动程序等的性能数据,以此来分析系统的瓶颈、监控组件的表现,最终帮助用户对系统进行合理调优。市面上采集Windows性能计数器指标的产品参差不齐,尤其在处理某类应用程序有多个进程实例时,采集的数据更是差强人意。所幸微软为码农精心准备了获得性能计数器指标的接口,用于灵活获得相关性能计数器指标值,但进程级别Windows性能计数器指标的采集监控,并没有想象的那么美好。因此本文结合笔者应用实践,探讨进程级别Windows性能计数器指标统一采集监控方案,以及在应用实践中遇到的坑,作为避坑指南,供感兴趣的同行参考。

进程级别Windows性能计数器指标作为特来电监控平台的一部分,对深入掌握系统进程级别运行状态,定位系统存在的问题,以便更快、更准的发现潜在的线上问题,起到了举足轻重的作用。

针对Windows性能计数器的监控,统一的采集监控方案如下所示:

 

 性能计数器指标统一采集监控方案

本文重点关注指标管理与指标采集,对指标存储及指标展现只做概要阐述。

一、        指标管理

Windows性能计数器指标类别比较多,因此我们需要对关注的指标进行分类管理。针对进程级别监控,我们主要关注CLR以及进程相关类别指标:.NET CLR Memory、.NET CLR Exception、.NET CLR Jit、.NET CLR Loading、Process等。

一个Windows性能计数器主要由3个属性来标识:指标类别(Category Name)、指标名称(Counter Name)、指标实例(Instance Name)。为了能对某类应用程序的多个进程实例进行统一采集,我们不对指标实例进行管理,而对指标实例对应的进程名称进行管理,同时支持一个性能计数器指标关联多个进程名称,并且在运行时动态计算出每个进程名称对应的多个进程实例,从而大幅降低指标管理的工作量。

二、        指标采集

指标采集主要解决采集插件运行时的空间(采集范围)与时间(采集频率)问题。并不是所有机器都部署了我们关注的应用程序,因此需要通过采集范围,确定需要对哪些机器上的性能计数器指标进行采集,同时需要确定采集频率,比如10秒、1分钟、5分钟等。

虽然微软提供了性能计数器接口用于采集对应的指标值,但当一个应用程序有多个进程实例时(比如一个机器上部署了多个IIS站点,进程名称都是w3wp,在性能计数器中的实例名称是w3wp、w3wp#1、…、w3wp#n),进行指标采集的坑会比较多,这里介绍几个比较典型的问题。

由于性能计数器默认不显示进程ID,所以无法直接建立进程实例和性能计数器指标实例的关联关系,相同的性能计数器指标实例名称,可能属于一个或多个不同的进程实例。

 

 进程实例与性能计数器实例关联关系

比如在.NET CLR Memory和Process中实例名称同为w3wp#1的性能计数器,可能对应同一个进程实例,也可能对应不同的进程实例,这是最诡异的坑!市面上一些监控产品无法准确采集同一应用程序对应多个进程实例的性能计数器指标值,可能与此有关。

为了能建立进程实例与性能计数器实例的关联关系,需要在显示性能计数器实例时带上进程ID。

方案一:修改注册表。但潜在的坑也很明显:只适用于.NET CLR Memory以及Process类别的性能计数器,同时可能会导致第三方监控工具失效,并且修改生产环境的注册表风险不可控,不是首选方案。

方案二:动态设置环境变量。针对.NET CLR相关的性能计数器,在调用性能计数器接口之前,进行如下环境变量设置:

Environment.SetEnvironmentVariable("COMPlus_ProcessNameFormat", "1");

该方案是进程级别的,设置后得到的性能计数器实例会自动带上进程ID,并且不会影响到全局设置或者其它应用程序,是推荐方案。

采集进程级别指标时,有时需要根据IIS站点进程ID获得对应的应用程序池以及物理路径:

 

 通过进程ID获得应用程序池以及物理路径

方案一:调用WMI(Windows Management Instrumentation)接口获得应用程序池。

Select * from Win32_Process WHERE processID=PID

该方案存在的坑:频繁调用会导致机器CPU飙升,不是首选方案。

方案二:调用Appcmd.exe命令获得应用程序池。

appcmd.exe list wp

该方案通过命令获得结果后,只需要进行字符串解析,即可获得进程ID与应用程序池的关联关系,是推荐方案。

三、        指标存储

指标存储在时序数据库中,每个性能计数器类别(Category Name)+性能计数器名称(Counter Name)对应一个指标表,表中按进程名称进行分类,每一行表示一个进程实例对应性能计数器实例的指标值。

四、        指标展现

指标展现可以按进程名称、进程实例、机器等维度进行分类聚合展现,相比登录到每个机器设置性能计数器,指标集中展现大幅提升了工作效率。

五、        总结

本文探讨了Windows性能计数器监控实践,主要涉及指标管理、指标采集、指标存储、指标展现四个方面,同时介绍了同一应用程序对应多个进程实例时,指标采集中遇到的坑。

转载于:https://www.cnblogs.com/liugh/p/11079258.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》也可以作为高校开展性能测试课程的参考教材,让在校学生能对性能测试的本质和价值有一定的认识。 《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》是一本基于HP LoadRunner 11工具的指导用书,从性能测试原理到工具使用再到项目实施,全面介绍了性能测试的各个方面,其内容基本主线说明如下。 第一步(了解理论):磨刀不误砍柴工,打下基础;第二步(掌握工具):深入介绍LoadRunner 11工具三大部分(Virtual User Generator、Controller、Analysis)如何实现用户行为的模拟、性能指标的监控、负载的生成及后期的数据分析;第三步(项目实施):理论联系实际,介绍性能测试项目实施的流程和性能测试部门的组织管理;第四步(进阶提升):对一些当下流行的或比较特殊的协议和开发技巧通过真实案例进行介绍。 基础篇 第1章 性能测试基础 1.1 性能测试工程师的标准及挑战 1.1.1 性能测试工程师的考评指标 1.1.2 性能测试工程师的挑战 1.2 性能测试基础 1.2.1 性能定义 1.2.2 性能指标 1.2.3 单机与网络性能测试 1.2.4 性能测试的流程 1.2.5 性能测试招聘要求 1.2.6 性能测试学习阶段 1.3 性能分析与调优 1.3.1 性能分析及调优原理 1.3.2 常见系统性能瓶颈 1.3.3 性能测试的注意要点 1.4 小结 工具篇 第2章 LoadRunner综述 2.1 LoadRunner简介 2.2 LoadRunner工具组成 2.3 性能测试原理 2.4 自动化测试工具和性能测试工具的区别 2.5 协议分析 2.5.1 HTTP详细介绍 2.5.2 HTTP报文结构 2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试操作流程预览 2.8 小结 第3章 用户行为模拟 3.1 VuGen界面介绍 3.1.1 Tree图形化模式 3.1.2 脚本模式 3.1.3 Output Window 3.2 录制用户行为 3.2.1 录制流程 3.2.2 协议选择 3.2.3 录制选项 3.2.4 开始录制 3.2.5 插入命令 3.2.6 结束录制 3.2.7 回放验证 3.2.8 录制回放常见问题 3.3 脚本开发 3.3.1 Action简介 3.3.2 脚本如何注释 3.3.3 语言规则 3.3.4 如何使用模板 3.3.5 脚本的导入导出 3.3.6 脚本调试 3.4 通用选项(General Options) 3.4.1 Parameterization标签 3.4.2 Replay标签 3.4.3 Environment标签 3.4.4 Display标签 3.4.5 Correlation标签 3.5 运行设置(Run-Time Setting) 3.5.1 Run Logic 3.5.2 Pacing 3.5.3 Log 3.5.4 Think Time 3.5.5 Additional attributes 3.5.6 Miscellaneous 3.5.7 Speed Simulation 3.5.8 Browser Emulation 3.5.9 Preferences 3.5.10 Download Filters 3.5.11 Data Format Extensions 3.6 参数化 3.6.1 参数化的操作 3.6.2 Parameter List界面介绍 3.6.3 VuGen中的参数 3.6.4 Controller中的参数 3.6.5 同行取值(Same line as) 3.6.6 参数类型 3.6.7 数据向导(Data Wizard) 3.6.8 参数和变量 3.7 关联 3.7.1 关联原理 3.7.2 自动关联 3.7.3 手动关联 3.7.4 一边录制一边关联 3.7.5 关联函数web_reg_save_param_ex详解 3.7.6 关联函数web_reg_save_param_regexp详解 3.7.7 关联函数web_reg_save_param_xpath详解 3.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值