Windows 2003/2008 终端服务器,应用程序崩溃时占用 95-100% 的 CPU,是否自动终止进程?

Windows 2003/2008 终端服务器,应用程序崩溃时占用 95-100% 的 CPU,是否自动终止进程?

我们目前托管了两个终端服务器,供用户通过 Citrix Metaframe 连接。我们托管的应用程序之一是内部应用程序,该应用程序是很久以前编写的,专门用于我们公司的仓库运营。有时用户会在此应用程序中运行查询,这会导致应用程序崩溃,从而消耗 95-100% 的 CPU。然后,用户可能会打开应用程序的第二个实体,但当天晚些时候,该实体也会崩溃。

我通过 SNMP 轮询监控服务器的 CPU 使用率。因此,每次警报告诉我服务器负载过重时,我都会手动以管理员身份登录以终止崩溃的进程。这种情况每天大约发生 2 次。终端服务器变得瘫痪,直到进程被终止(甚至需要 2-3 分钟才能登录),严重影响所有其他用户。

有什么工具或程序可以帮助我解决这个问题吗?我需要它来检查特定进程中的高 CPU 使用率。如果发现应用程序的 CPU 使用率过高并且持续了 X 段时间,则将其终止!(如果 CPU 使用率暂时飙升,则不能终止应用程序)。

尝试过几种“自动终止”工具,但没有发现任何一种可以随着时间推移针对特定 .exe 文件消耗 CPU 的工具。

答案1

我没有针对您的需求推荐特定的工具,但至少您可以快速轻松地使用几个 Sysinternals 工具拼凑出一些东西。您可能能够以非交互方式(按计划)运行它,但它绝对不是一项服务。

  1. 使用 Procdump 监控具有适当进程名称(基于可执行文件)的进程的 CPU 使用率。当进程达到配置的级别时,生成转储。可以从循环 .cmd 文件启动此操作并稍等片刻,这样 procdump 的每个实例将只转储一次,或者可以使用 -n 选项在退出之前指定大量转储。
  2. 监视转储输出目录中的新文件。根据需要解析 PID,然后删除文件或不删除 - 听起来你不会要调试和修复应用程序。
  3. 使用PsKill杀死相关进程。

就像任何拼凑起来的东西一样,从长远来看,这可能会或可能不会运行良好或稳定,但如果首选选项(修复问题应用程序)不可行,那么您无论如何都会沦为第二梯队。

Sysinternals 工具现已从 Microsoft 上提供http://technet.microsoft.com/en-us/sysinternals/default

答案2

Windows 系统资源管理器 (WSRM)应该可以帮助你解决这个问题:http://technet.microsoft.com/en-us/library/cc732553.aspx(终端服务配置这里

我实际上从来没有用过它,但它声称能够创建策略来控制记忆中央处理器应用程序和服务的资源。以下是文章目的是2003 年款

答案3

您可以使用为此。第一步是一个简单的单行程序,您可以使用任务计划程序运行 PowerShell 脚本来检查应用程序是否挂起。

$process = Get-Process -Name $application
If ($process.CPU -igt 90.00) {Stop-Process -InputObject $process -Force}

要运行该脚本,您必须使用脚本作为参数启动 powershell:

powershell.exe "& '$path'"

相关内容