【发布时间】:2015-01-29 20:04:32
【问题描述】:
我想在我们的 Windows Server 2008 机器上运行一个 .NET 控制台应用程序,它每 2 秒监控一次 CPU 使用率。
如果任何单个应用程序使用 > 30% CPU,连续两次,它应该被记录。
我将每 2 秒执行一次“CheckCpu”...但我的问题是,我如何确定每个进程的 CPU 使用率?而且,有效地,这样我就不会让我们的服务器陷入困境:)
Dim lStrProcessCurrent As List(Of String)
Dim lStrProcessPrevious As List(Of String)
Private Sub CheckCpu()
Dim pcc As New PerformanceCounterCategory("Process")
'Clear "Current" run
lStrProcessCurrent = New List(Of String)
For Each instance As String In pcc.GetInstanceNames
Using cnt As PerformanceCounter = New PerformanceCounter("Process", "ID Process", instance, True)
Dim processName As String = cnt.InstanceName
' ????? HOW TO DETERMINE CPU USAGE ????
Dim cpuUsage As Long = 31
If cpuUsage >= 30 Then
'Was over 30% in Previous check
If lStrProcessPrevious.Contains(processName) Then
LogCpuSpike(processName)
End If
lStrProcessCurrent.Add(processName)
End If
End Using
Next
'Update "Previous" run
lStrProcessPrevious = lStrProcessCurrent
End Sub
【问题讨论】:
-
问题被否决但没有评论。我的问题不清楚吗?我没有投入第四次开发工作吗?
-
非常确定 Windows 资源监视器可以做到这一点,而无需您编写任何代码。
-
我认为这是个好问题。有些人会立即对他们不理解的问题投反对票。
标签: .net vb.net performance cpu performancecounter