Windows系统性能计数器是操做系统支持用于应用和组件发布性能数据的特殊对象,而且支持其余应用获取和分析这些已发布的数据。Windows中的性能计数器不少,包括针对磁盘、网络和TCP等计数器,用户可以使用这些性能计数器提供的数据肯定程序瓶颈和系统性能。经过运行perfmon.msc启动性能计数器数据,如图1所示。用户能够经过右击计数器清单添加其余计数器,在添加的过程当中显示如图2所示的“添加计数器”对话框。网络
图1 系统性能计数器ide
图2 “添加计数器”对话框性能
其中包括性能计数器名,如%Processor Time和Handle Count等,以及计数器对应的范例。当须要获取处理器相关的性能计数器数据时,默认以处理器命名。若是有多个处理器,则为计数器分别添加相似于#一、#2和#3这样的后缀。若是须要处理多个实例,则在添加计数器的过程当中制定相应的实例。网站
5.1 Consuming Counter Data操作系统
PowerShell没有内置的cmdlet用于获取性能计数器的值,因此必须使用.NET的类。为此建立System.Diagnostics.PerformanceCounter的实例,配置其中的属性并不断调用NextValue()方法来获取相应的值。在开始操做性能计数器以前,须要首先配置用户权限为管理员权限。而后建立脚本用于监视CPU的使用率,将脚本命名为“Monitor-CpuUsage.ps1”。将会用性能计数器获取并显示当前CPU每秒的占用率,这个脚本会一直循环执行下去;除非用户按Ctrl-C终止。其代码以下:3d
$counter = New-Object Diagnostics.PerformanceCounterrest
$counter.CategoryName = "Processor"orm
$counter.CounterName = "% Processor Time"对象
$counter.InstanceName = "_Total"blog
while ($true)
{
$value = $counter.NextValue()
Write-Host "CPU: $value"
sleep 1
}
其中涉及的计数器名和实例名均可以很容易地从“添加计数器”对话框中找到,Monitor-CpuUsage.ps1脚本的执行结果如图20所示。
图3 执行结果
从图中能够看到此时的CPU负载并不重,只达到10%左右,用户能够用相似的方法获取其余性能计数器的数据。
5.2 监视程序
当使用程序时发生不正常的状况时,一般都会形成占用大量的系统资源而致使系统重启。这时使用性能计数器能够监控程序的运行状况,即在运行程序的同时启动监视脚本。该脚本会实时获取和分析性能数据,当发生异常时会向用户发出警告。
针对意外终止的应用程序建立一个监视脚本Monitor-Crashes.ps1,脚本将会启动外部进程。当程序意外退出时,脚本会将重启5次应用程序以后中止尝试,其代码以下:
function Start-Process
{
Write-Host "Starting process..."
.\UnpredictableCrash.exe
}
for ($i = 0; $i -lt 5; $i++)
{
Start-Process
Write-Host "Process exited $($i + 1) times."
}
Write-Host "Program restart limit exceeded."
该脚本的执行结果如图21所示。
图4 执行结果
在脚本执行过程当中使用了一个名为“UnpredictableCrash.exe”的程序,这个程序执行一秒钟等待操做后并退出。经过这个方法来模拟执行必定的操做,但在特定条件下意外退出的程序。在脚本中只是重启程序5次。若是须要,则可让程序一直执行,使其做为一个驻留程序来执行。
做者: 付海军
出处:http://fuhj02.blog.51cto.com 版权:本文版权归做者和51cto共有 转载:欢迎转载,为了保存做者的创做热情,请按要求【转载】,谢谢 要求:未经做者赞成,必须保留此段声明;必须在文章中给出原文链接;不然必究法律责任 我的网站: http://txj.lzuer.com/