监控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();
        }
    }
}

 

这是一个用于网站监控的程序,对于服务器管理员来说,24小时监控服务器是否正常是很烦人的时。有了这个程序,一切都简单了。 本软件是一个运行于Win2000服务器上的HTTP监控程序,可以实时监控服务的运行状态,一但HTTP服务发生错误,可以自动重起服务器、重起IIS、或是通过请求指定的页面通知管理员。 本程序很小,完全不会影响到服务器的性能。 使用说明:将 HttpMon.exe 复制到硬盘上,并将其添加到Windows的任务计划中,设置为"计算机启动时运行",以administrator 的权限运行。 主要功能: 一.定时功能: 可指定每隔几天重启一次计算机或是重启IIS。 若是指定为0天时表示每天重启一次。 二.Http监控: 1.运行HttpMon.exe 点击"添加"按钮添加监控条件。 a)在"检查链接"里加上用来监控的页面 如 http://XXX/state.asp 在state.asp加随意加上一个简单代码,如<%response.write "OK"%> 这样可以检查IIS是否死掉 若要检查链接数据库是否正常还可以把代码写为: <% set db=CreateObject("ADODB.Connection") db.open 数据库链接 db.close %> b)在"检查频率"中可以指定多长时间检查一次,默认是20分钟 c)在返回信息中选择要检查的条件,有几种情况: 返回状态等于,返回状态值不等于,文件大小等于,小于,大于。 "返回状态值" 指IIS返回的客户端时的状态。 200 是正常 302 文件重定向 404 文件找不到 500 服务器内部错误 . . . 默认是:当返回状态不等于200时(表示IIS出错时)重起IIS 当上面情况出现时可做几个对应处理: a)重启计算机 b)重启IIS c)关闭计算机 d)请求页面 "请求页面"可用于扩展程序功能,如通过请求一个程序页面发信给管理员。 2.因为有时重启IIS不一定成功,所以当上面错误情况出现时,程序会自动缩短检查的隔时间,默认为5分钟。也可以自定义。 当上面操作多次重试都不成功时,还可以设置对应的操作。例如:当重启了3次IIS后还是有错误,这时可以在后面设置为重启计算机 3.关于日志功能:日志功能可以记录Http监控程序的工作情况,他可以记录什么时候检查过什么页面,什么时候出现了错误,对应操作是什么。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值