我不确定这是否可能,但是当服务器的 CPU 处理能力为 60% 并且持续时间超过 5 分钟时,有没有办法通过作业或服务重新启动 IIS?如果是,如何做到这一点?
谢谢!
从 IIS 版本 6 开始,您拥有应用程序池,它们可以基于Fixed Intervals
或进行回收Memory Based Maximums
。基于此,我不建议您根据 CPU 使用情况重新启动 IIS,您可能会掩盖高 CPU 问题。退出 DebugDiag 并使用 High-CPU 规则并在 CPU 超过 60% 时进行内存转储。
要回答您的问题:
使用下面的代码来监控 CPU(取自How to get the CPU Usage in C#? - 该线程中还有其他示例可能更适合您的使用,即带有 Timer_Ticks 的示例):
PerformanceCounter cpuCounter;
PerformanceCounter ramCounter;
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
public string getCurrentCpuUsage(){
return cpuCounter.NextValue()+"%";
}
public string getAvailableRAM(){
return ramCounter.NextValue()+"MB";
}
然后在 5 分钟后,您可以重置 IIS:
System.Diagnostics.Process process = new System.Diagnostics.Process();
//process.StartInfo.FileName = @"C:\WINDOWS\system32\iisreset.exe";
process.StartInfo.FileName = "cmd";
process.StartInfo.Arguments = "/C iisreset /STOP";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.WaitForExit();
提示:您需要管理员权限才能重置 IIS。