监控进程,如果超过阈值CPU使用率,则关闭

时间:2010-04-30 19:04:27

标签: .net performance process monitoring cpu

我是WMISystem.Diagnostics等新手。 我需要写一些东西(一个服务?)来监视CPU使用率%的几个进程。 当我在任务管理器中时,CPU列是我想要的那个(即百分比)。

我需要能够在远程计算机上运行它,并让它检查CPU使用率 每隔一秒左右。当使用率超过30%时,我需要自动重启违规服务。

我已经阅读了所有(大多数)相关问题,我认为PerformanceCounter可能是我需要使用的,但我不确定我是否需要为每个进程中的一个,以及如何定位过程(它必须是基于名称的,而不是基于PID的)。

任何人都可以提供建议 摘要

  1. 我不想遍历机器上的所有进程(如果可以避免的话)
  2. 我需要进程的CPU使用率%
  3. 如果使用率超过30%,我需要重新启动流程。
  4. 由于

2 个答案:

答案 0 :(得分:1)

您可以考虑查看我之前的一个旧自由软件项目的来源:The SETI@Home Service。它实现了一个Windows服务,如果CPU使用率超过certian值,它会暂停其客户端进程(SETI @ Home客户端)。它甚至添加了其他几个性感的曲折,比如任何时候暂停其他进程启动(例如:你最喜欢的游戏),崩溃重启,内置网络服务器等等。

主要的缺点是来源是Ada,但是大多数人发现Ada更容易阅读他们不熟悉的大多数其他语言。

IIRC,代码的基本要点是,您可以查看包含系统性能信息的Windows注册表区域。基本上,perfmon中可用的任何东西都可以通过程序从系统注册表中读取。

答案 1 :(得分:0)

我终于通过编写PerformanceCounter和Process的包装来解决我自己的问题。 我有一个名为ProcessMonitor的类,它有一个PerformanceCounter和一个Process作为属性。我创建了另一个名为ProcessMonitorList的类,它只包含List。然后我的主要Commandline应用程序有一段时间(true),它查询具有提供的名称的所有进程,并在每秒吐出它们的CPU使用率。如果使用率超过阈值,则该过程将被终止,并且可选择将电子邮件发送到已配置的电子邮件地址。