一旦Apache进程达到内存阈值,我将使用powershell脚本重新启动Apache服务。
该脚本将按任务管理器中的计划每分钟运行2-3次。
在下面的脚本中,我需要使用start sleep commandlet吗?如果需要,最好将其放置在哪里,以及使其休眠多长时间?
$Threshold = 200 * 1024 * 1024; # Bytes (209,715,200 bytes = 0.195GB)
$ServiceName = my service name;
Get-WmiObject -ComputerName "localhost" -Class Win32_PerfFormattedData_PerfProc_Process | where { $_.Name -like "httpd*" } | foreach {
$procobj = $_;
if($procobj.workingset -gt $Threshold)
{
stop-Service $ServiceName;
start-Service $ServiceName;
$stamp = Get-Date
echo $($stamp + " Started service: " + $ServiceName);
#sleep 5; //Do I need this and if so, where should it be placed?
}
}
更新
Apache可能有两个或多个进程,Get-Wmi会将它们返回为httpd、httpd#1、httpd#2。。。。
我问这个问题的原因是,循环将检查这些进程的工作集,因此假设返回了3个已处理的进程:httpd、httpd#1和httpd#2,想象httpd#1与httpd#2都已达到阈值。
注意,在循环中,我正在重新启动
服务
这将重新启动过程。由于我的两个httpd进程已达到阈值,我将重新启动服务2-ice。我试图确保服务重启只发生一次,即使多个进程达到阈值。不确定开始睡眠是否能解决这个问题,或者是否有更好的方法。
非常感谢。