3

我们有一台服务器,其中 2 个服务不断运行。有时这些服务消耗超过 90% 的 CPU,例如:100%。重新启动这些服务会恢复正常的 CPU 使用率。我需要一个脚本/批处理文件,以便它不断监控 CPU 使用率,如果使用率很高,则重新启动这些服务

4

2 回答 2

1
@Echo OFF

SET    "SERVICE=Themes"
SET /A "MAXUSAGE=95"
SET /A "INTERVAL=5"

:LOOP
For /F %%P in ('wmic cpu get loadpercentage ^| FINDSTR "[0-9]"') do (
    IF %%P GTR %MAXUSAGE% (
        Echo [%TIME:~0,8%] CPU Usage: %%P%% Reached the limit: %MAXUSAGE%%%
        Echo Restarting %SERVICE% ...
        SC STOP  "%SERVICE%" 1>NUL
        SC START "%SERVICE%" 1>NUL
        Echo Service restarted.
    ) ELSE (
         Echo [%TIME:~0,8%] CPU Usage: %%P%%
    )
)
Ping -n %INTERVAL% Localhost >NUL
GOTO :LOOP

输出:

[10:55:31] CPU Usage: 19%
[10:55:36] CPU Usage: 4%
[10:55:42] CPU Usage: 38% Reached the limit: 25%
Restarting Themes ...
Service restarted.
[10:55:47] CPU Usage: 23%
[10:55:52] CPU Usage: 2%
[10:55:57] CPU Usage: 16%

要获得更精确的信息,您可能希望使用以下命令检查与服务关联的可执行文件的当前 CPU 百分比:

wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessor
Time
于 2013-04-30T08:41:24.777 回答
0
@ECHO OFF
SETLOCAL
:again
SET "load="
for /f "skip=1" %%L in ('wmic cpu get loadpercentage') do IF NOT defined load SET load=%%L
IF %load% lss 70 GOTO wait
::
::
::
ECHO load is %load%%% - restart procedures
:wait
timeout /t 5 >nul
GOTO again

WMIC 命令输出 3 行。第一个是简单的'loadpercentage',可以跳过。第二个是负载百分比并放入load. 确保if not defined任何后续行都不会改变load- 这就是为什么loadwmic

根据所需负载检查负载是显而易见的 - 根据需要插入重启命令。该消息仅供参考。

超时是一种原始安排,允许作业运行直到终止。在5循环之间是 5 秒。随意改变。>nul抑制的timeout倒计时。

如果您想使用任务调度程序来控制重复,可以完全省略它,或者CHOICE如果您想要更多控制,可以使用。

于 2013-04-30T08:29:06.263 回答