监控IIS的运行状态
IIS经常出现假死的情况,具体什么时候会出现假死,我就不说了,今天我要写的是如何监控IIS的状态。
程序的功能是:如果IIS是为运行的状态,就重启IIS,如果IIS的连接数达到了设置的连接数,也重启IIS。我写了一个window服务,时刻监控着IIS的运行状态。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Management; using System.Diagnostics; using System.ServiceProcess; using System.Configuration; namespace IISWatcher { public partial class IISWatcher : ServiceBase { public IISWatcher() { InitializeComponent(); } System.Timers.Timer tmr; protected override void OnStart(string[] args) { tmr = new System.Timers.Timer(); tmr.Interval = 6000; tmr.Elapsed += new System.Timers.ElapsedEventHandler(tmr_Elapsed); tmr.Enabled = true; } void tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { string currentAnonymousUsers = ""; string timeOut = ""; try { currentAnonymousUsers = ConfigurationManager.AppSettings["CurrentAnonymousUsers"]; timeOut = ConfigurationManager.AppSettings["TimeOut"]; ServiceController winSc = new ServiceController("WAS"); if (winSc.Status != System.ServiceProcess.ServiceControllerStatus.Running && winSc.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { StartService("WAS"); } ServiceController sc = new ServiceController("W3SVC"); if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Running && sc.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { StartService("W3SVC"); } else { SelectQuery query = new SelectQuery("Select " + currentAnonymousUsers + " from Win32_PerfRawData_W3SVC_WebService where name=\"_total\""); ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); int currentAnonUsers = 0; foreach (ManagementBaseObject disk in searcher.Get()) { int.TryParse(disk[currentAnonymousUsers].ToString(), out currentAnonUsers); } if (currentAnonUsers > Convert.ToInt32(timeOut)) { StartService("W3SVC"); } } } catch (Exception ex) { EventLog.WriteEntry("IISWatcherRecord", "ErrorMessage:" + ex.Message, EventLogEntryType.Error); } } static private void StartService(string serviceName) { ServiceController sc = new ServiceController(serviceName); sc.Start(); for (int i = 0; i < 5; i++) { sc.Refresh(); System.Threading.Thread.Sleep(1000); if (sc.Status == System.ServiceProcess.ServiceControllerStatus.Running) { break; } if (i == 4) { throw new Exception(serviceName + "启动失败!启动时间超过5秒!"); } } } protected override void OnStop() { tmr.Stop(); } } }
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击文章下方“推荐”按钮【精神支持】,您的“推荐”将是我最大的写作动力!
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决