我们目前正在为我们的用户托pipe两台terminal服务器,通过Citrix Metaframe进行连接。 我们在那里托pipe的一个应用程序是一个很早以前编程的内部应用程序,特定于我们公司的仓库操作。 有时用户会在这个应用程序中运行查询,使应用程序崩溃,使其消耗95-100%的CPU。 然后用户可能会打开应用程序的第二个实体,只是在当天晚些时候才会崩溃。
我正在通过SNMP轮询监视服务器的CPU使用情况。 所以每当一个警报告诉我服务器负载很重,我手动login作为pipe理员来杀死坠毁的过程。 这大概每天发生2次。 terminal服务器变得残废,直到进程被终止(甚至需要2-3分钟login),严重影响所有其他用户。
有什么工具或程序,我可以执行,以帮助我呢? 我需要它来检查特定进程中的高CPU使用率。 如果为应用程序find高CPU,并在X时间内观察,请杀死它! (如果CPU使用率暂时boost,不能让它杀死应用程序)。
已经尝试了几个“自动杀死”工具,但没有发现任何可以针对特定的.exe文件的CPU随着时间的推移。
我没有一个特定的工具build议来满足你的需求,但是至less你可以用一些Sysinternals工具来拼凑一些东西。 你可能可以运行这个非交互(预定),但它绝对不会是一个服务。
就像任何拼凑起来的东西一样,从长远来看,这可能会也可能不会运行良好或者是稳定的,但是如果首选scheme(修复问题应用程序)不可行,则无论如何您都会被减less到第二个string。
Sysinternals工具现在可以从Microsoft在http://technet.microsoft.com/en-us/sysinternals/default
Windows系统资源pipe理器(WSRM)应该帮助你: http : //technet.microsoft.com/en-us/library/cc732553.aspx (terminal服务configuration在这里 )
我其实从来没有使用它,但它声称能够创build策略来控制应用程序和服务的内存和cpu资源。 这是一篇针对srv 2003的文章
你可以使用PowerShell的。 在第一步中,您可以使用任务计划程序运行PowerShell脚本来检查应用程序是否挂起。
$process = Get-Process -Name $application If ($process.CPU -igt 90.00) {Stop-Process -InputObject $process -Force}
要运行该脚本,您必须以脚本作为参数来启动powershell:
powershell.exe "& '$path'"