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性能计数器监控实践,主要涉及指标管理、指标采集、指标存储、指标展现四个方面,同时介绍了同一应用程序对应多个进程实例时,指标采集中遇到的坑。
Windows性能计数器监控实践的更多相关文章
- 使用windows性能计数器监控cpu使用率
https://blog.csdn.net/yabingshi_tech/article/details/26672355 2. http://blog.51cto.com/qixue/1702557 ...
- 利用Windows性能计数器(PerformanceCounter)监控
一.概述 性能监视,是Windows NT提供的一种系统功能.Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器.性能对象,就 ...
- paip.windows io监控总结
paip.windows io监控总结 io的主要参数是个.disk queue length 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- Windows 回调监控 <二>
在之前的文章Windows 回调监控 <一> 总结了关于CreateProcessNotify,CreateProcessNotifyEx和LoadImageNotify一些用法,之后产生 ...
- Windows性能计数器2
判断瓶颈 Ø 判断应用程序的问题 如果系统由于应用程序代码效率低下或者系统结构设计有缺陷而导致大量的上下文切换(context switches/sec显示的上下文切换次数太高)那么就会占用大量的系统 ...
- C# Windows IPSEC监控(仅此一家,别无分店)
Windows IPSEC监控,使用C#编写,输出为一行字符串,可以按照既有IPSEC规则生成模板 using System; using System.Diagnostics; using Syst ...
- windows 进程监控 Procmon.exe
windows 进程监控 Procmon.exe window下一个程序打开太慢,可以用此程序监控.在哪一步慢了,读取文件还是注册表. ProcessMonitor3.2 Process Monito ...
- Kubernetes监控实践
一.Kubernetes介绍 Kubernetes(K8s)是一个开源平台,能够有效简化应用管理.应用部署和应用扩展环节的手动操作流程,让用户更加灵活地部署管理云端应用. 作为可扩展的容错平台,K8s ...
- 【译】Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu
本文介绍两个可行的K8s监控方案:Prometheus和Sensu.两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪K8s关键组件的性能.定位故障.接收预警. 拓展阅读:Kubernetes监控 ...
随机推荐
- springboot 整合rabbitMQ
RabbitMQ RabbitMQ是一个被广泛使用的开源消息队列.它是轻量级且易于部署的,它能支持多种消息协议.RabbitMQ可以部署在分布式和联合配置中,以满足高规模.高可用性的需求. 在pom. ...
- 关于PLSQL配置了正确的Oracle客户端但是不能识别tnsnames.ora问题
场景描述: 在通过安装Oracle客户端使用PLSQL的时候发现PLSQL在已经正常配置了Oracle Home和Ocdi library的情况下不能识别tnsnames.ora中的有效配置. 正常安 ...
- plsql 32位,Oracle Client 64位 无法读取tnsnames.ora文件
ORACLE_HOME=C:\app\fjz\product\11.2.0\client_1 1)设置windows系统环境变量: TNS_ADMIN=C:\app\fjz\product\11.2. ...
- Ubuntu安装sysv-rc-conf配置开机启动服务
ubuntu下chkconfig的替代方案: 第一步:在终端键入sudo apt-get install sysv-rc-conf安装sysv-rc-conf服务. 第二步:检查设置系统开机自启动服务 ...
- [LeetCode] 89. Gray Code 格雷码
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- IDEA进行activiti-archetype-unittest脚手架的安装
官网:https://www.activiti.org/ 第一步:下载activiti源码(https://github.com/Activiti/Activiti/tags) 第二步:在termin ...
- python gzip
通常用gzip压缩过的云端数据需要做解压处理,以下代码主要用python3实现对获取到的云端gzip压缩数据进行还原. # -*- coding: utf-8 -*- ""&quo ...
- Docker学习-安装,配置,运行
Docker继续学习 2019年12月15日23:15:36 第二次学习docker Docker三个重要概念: 镜像 就是一个模板(类似一个Java类) 容器 容器是用镜像创建的运行实例. 仓库 仓 ...
- python 能做什么(常用库)
1. 编写脚本,如测试脚本.初始化脚本.运维脚本:pywin32.nose2. 图形界面开发: Tkinter.PyQt . wxPython . PySide .Pillow3. 爬虫: Scrap ...
- Python开发之virtualenv和virtualenvwrapper详解
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...