我们有一台服务器,其中 2 个服务不断运行。有时这些服务消耗超过 90% 的 CPU,例如:100%。重新启动这些服务会恢复正常的 CPU 使用率。我需要一个脚本/批处理文件,以便它不断监控 CPU 使用率,如果使用率很高,则重新启动这些服务
问问题
3407 次
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
- 这就是为什么load
在wmic
根据所需负载检查负载是显而易见的 - 根据需要插入重启命令。该消息仅供参考。
超时是一种原始安排,允许作业运行直到终止。在5
循环之间是 5 秒。随意改变。>nul
抑制的timeout
倒计时。
如果您想使用任务调度程序来控制重复,可以完全省略它,或者CHOICE
如果您想要更多控制,可以使用。
于 2013-04-30T08:29:06.263 回答