设为首页 收藏本站
查看: 1621|回复: 0

[经验分享] 关于Windows主机的性能监控

[复制链接]

尚未签到

发表于 2014-4-11 08:49:29 | 显示全部楼层 |阅读模式
092152097843918.jpg

前言
我的目的是监控SQL Server实例的运行,但每个实例是跑在windows上的,所以主机级别的稳定性也是不可或缺的,这篇文章主要围绕这张图的windows主机节点部分来讲。
一  工具
工欲善其事,必先利其器。要做windows的性能监控除了要了解我们关注的性能点外还要去准确的收集处理。收集这些数据的方式有很多,这里我主要讲我们监控中用到的两种工具:powershell和perfmon。
1. powershell
类似linux的shell,是微软为windows开发的壳程序,我们可以借助powershell编写很多脚本程序来完成一些自动化的工作。
1.1. get-counter
get-counter是powershell获取windows performance counter的接口命令,而performance counter如同它的英文名一样代表了系统相关的性能计数器,也就是说我们可以用powershell来获取我们关注的metrics信息,当然performance counter的值也不只这么一种获取方式。
1.2 get-wmiobject
WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术,其实就是对windows各种资源的一种抽象,通过它我们可以直接访问、配置、管理和监视近乎所有windows资源。同样通过powershell的get-wmiobject我们可以监控到所有资源。
2. perfmon
perfmon主要是windows系统自带的性能监控工具,它可以将我们关注的metrics以图形化的方式展现出来,并且还可以抓取一段时间的性能数据生成性能报告方便我们查看结果。
在我们的windows主机性能监控中主要借助powershell来获取监控数据,perfmon可以帮我们更加实时的查看问题也可以在做相关测试时用到。
二  metrics2.1. CPU相关%Processor Time
命令:Get-Counter -Counter '\Processor(_Total)\% Processor Time'
解释:获取本机所有处理器的使用率,瞬时值。它的计算方式是首先获得cpu执行空闲线程的时间,因为每个cpu上都有一个空闲线程,当没有任务的时候就执行空闲线程,通过计算空闲线程的执行时间进而得到cpu忙碌的时间。
问题:通过这个命令我们可以得到cpu瞬时的使用率,但是并不能很好的反映出一段时间的cpu使用情况,假使cpu在2分钟前非常忙碌并且已经产生瓶颈而我的监控粒度又比较粗,每5分钟取一次数据,那么我就无法得知cpu准确的使用情况,不能一下找出性能瓶颈可能会怀疑是磁盘或者内存的问题,这样非常耽误事儿。
解决:1.通过增加SampleInterval参数来获取一段时间的平均值,从而准确的了解这段时间内cpu的使用情况,但很容易理解的是加了这个参数会让脚本程序阻塞到这,它会等待这样一段时间后再返回结果,这样我们的性能数据收集肯定不好处理。
   2.减小性能数据采集的时间间隔,尽量做到秒级,然后可以再通过求均值的尽量让数据能准确反映一段时间内的cpu使用情况,但数据收集的粒度到底有多细致还得看集群的大小和采集的方式。如果是通过pull,也就是存在中心节点定时到每个监控节点取数据,那么随着集群规模的增长,监控的粒度肯定会受影响,中心节点会成为瓶颈。而如果是通过push,每个监控节点都有相应的agent来做数据的收集,不存在中心节点,那么能够支撑的集群规模会大很多,监控粒度也能细致很多。
(以下数据的收集都是一样的问题,我就不复述了,具体到每个metrics肯能会存在不同的计算方式,这个可以参考微软官方详细说明)
% Privileged Time
命令:Get-Counter -Counter '\Processor(_Total)\% Privileged Time'
          Get-Counter -Counter '\Processor(_Total)\% Privileged Time' -SampleInterval X
解释:对应于处理器执行 Microsoft Windows 内核命令(例如处理 SQL Server I/O 请求)所用时间的百分比。,类似linux的sys。
公式:
% User Time
命令:Get-Counter -Counter '\Processor(_Total)\% User Time'
解释:cpu执行用户进程的时间百分比,类似linux的user。
计算方式同privileged time。
System Processor Queue Length
命令:Get-Counter -Counter '\System\Processor Queue Length'
解释:处理队列的线程数,它使指需要处理的,而不是正在处理的。
SUM (N) / x
2.2. 存储相关2.2.1 关于磁盘响应时间Avg. Disk sec/Transfer
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Transfer'
解释:显示存储端处理每个IO请求的平均响应时间。

Avg. Disk sec/Read
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read'
解释:显示存储端处理每个读IO的平均响应时间。
Avg. Disk sec/Write
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Write'
解释:显示存储端处理每个写IO的平均响应时间。
2.2.2 关于IOPSDisk Transfers/sec
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Disk Transfers/sec'
解释:显示了磁盘上的IOPS总数,直观的显示了所对应LUN上的每秒IO的吞吐量。
Disk Reads/sec
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Disk Reads/sec'
解释:显示磁盘每秒的读IO数量。
Disk Writes/sec
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Disk Write/sec'
解释:显示磁盘每秒的写IO数量。
2.2.3 关于ThroughputDisk Bytes/sec
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Disk Bytes/sec'
解释:磁盘上总得数据传输量,包括读写。
Disk Read Bytes/sec
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Disk Read Bytes/sec'| format-table –auto
解释:磁盘上每秒读数据的传输量。
Disk Write Bytes/sec
命令:Get-Counter -Counter '\PhysicalDisk(_Total)\Disk Write Bytes/sec'| format-table –auto
解释:磁盘上每秒写数据的传输量。
2.3. 内存相关Pages/sec
命令:Get-Counter -Counter '\Memory\Pages/sec'
解释:每秒发生的硬错误页数,包括从磁盘读取的和写入磁盘释放工作空间的,类似linux的swap。
FreePhysicalMemory,TotalVisibleMemorySize
命令:Get-WmiObject -Query 'Select * from Win32_OperatingSystem' | Select FreePhysicalMemory,TotalVisibleMemorySize | Format-Table -AutoSize"
解释:获取空闲内存和总内存,可以用于计算内存使用率等。
2.4. 网络相关Bytes Total/sec
命令:Get-Counter –Counter ‘\Network Interface(*)\Bytes Total/sec’ | format-table –auto
解释:获取所有网卡的流量,并未求和只是分别获取。
Bytes Received/sec
命令:Get-Counter –Counter ‘\Network Interface(*)\Bytes Received/sec’ | format-table –auto
解释:获取所有网卡的流入量。
Bytes Sent/sec
命令:Get-Counter –Counter ‘\Network Interface(*)\Bytes Sent/sec’ | format-table –auto
解释:获取所有网卡的流出量。
Packets Received/sec
命令:Get-Counter -Counter ‘\Network Interface(*)\Packets Received/sec’ | format-table –auto
解释:获取所有网卡的收到的数据包的数量。
Packets Sent/sec
命令:Get-Counter -Counter ‘\Network Interface(*)\Packets Sent/sec’ | format-table –auto
解释:获取所有网卡的发送包得数量。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-17053-1-1.html 上篇帖子: 查看windows 8 是否彻底激活 下篇帖子: 批处理打开3389端口建立隐藏账号 Windows 监控 主机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表