当CPU使用率高时,如何通过批处理文件重启服务器上的某些特定服务?

时间:2013-04-30 07:06:24

标签: batch-file

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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',可以跳过。第二个是负载百分比,并放入loadif not defined确保任何后续行都不会更改load - 这就是load

之前wmic被设置为[nothing]的原因

根据需要检查负载是否明显 - 根据需要插入重启命令。该消息仅供参考。

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

如果您想使用任务计划程序来控制重复,可以完全省略这一点,如果您想要更多控制,可以使用CHOICE