sdchy 发表于 2017-12-27 16:19:35

性能、可用性、伸缩性、扩展性、安全性、可监控是网站架构最核心的几个要素

  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>
{  

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.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();
  
}
  
}
  
}
  
页: [1]
查看完整版本: 性能、可用性、伸缩性、扩展性、安全性、可监控是网站架构最核心的几个要素