我们有一台服务器,其中2个服务不断运行。有时这些服务消耗超过90%的CPU,例如:100%。重新启动这些服务将恢复正常的cpu使用率。我需要一个脚本/批处理文件,以便它不断监视CPU使用情况,如果使用率很高,则重新启动这些服务
答案 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',可以跳过。第二个是负载百分比,并放入load
。 if not defined
确保任何后续行都不会更改load
- 这就是load
wmic
被设置为[nothing]的原因
根据需要检查负载是否明显 - 根据需要插入重启命令。该消息仅供参考。
超时是一种原始的安排,允许作业运行直到终止。循环之间5
是5秒。随意改变。 >nul
会抑制timeout
的倒计时。
如果您想使用任务计划程序来控制重复,可以完全省略这一点,如果您想要更多控制,可以使用CHOICE
。