利用windows性能计数器进行服务器性能监控

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Management;
using System.Runtime.InteropServices;
using System.Data;
using System.Data.SqlClient;
using System.DirectoryServices;
using System.Collections;
using System.Configuration;
using System.Collections.Specialized;
using System.IO;

namespace MON.Client
{
    public static class SysInfo
    {
        static Dictionary<string, PerformanceCounter> dic;
        static double DiskUsePercent;
        static double SysDiskUsePercent;
        static SysInfo()
        {
            try
            {
                dic = new Dictionary<string, PerformanceCounter>();
                foreach (string setting in ConfigurationManager.AppSettings)
                {
                    var arr = ConfigurationManager.AppSettings[setting].Split('#');
                    if (arr[arr.Length - 1] == "IsCounter")
                    {
                        try
                        {
                            var pc = new PerformanceCounter(arr[0], arr[1], arr[2]);
                            dic.Add(setting, pc);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(arr[0] + "找不到");
                            Log.WriteLog(ex.Message);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Log.WriteLog(ex.Message);
            }
        }
        static void initDiskInfo()
        {
            #region 备忘
            //只获取系统盘代码如下
            //ManagementObject CPANInfo = new ManagementObject(string.Format("win32_logicaldisk.deviceid=\"{0}\"", System.Environment.SystemDirectory.Substring(0, 2)));
            //CPANInfo.Get();
            //var s = Convert.ToDouble(CPANInfo["Size"]);
            //var l = Convert.ToDouble(CPANInfo["FreeSpace"]);
            //var d = (s - l) / s * 100;
            //return d;
            #endregion
            try
            {
                DriveInfo[] drives = DriveInfo.GetDrives();
                long totalSize = 0;
                long freeSize = 0;
                long CTotalSize = 0;
                long CFreeSize = 0;
                foreach (DriveInfo drive in drives)
                {
                    if (drive.DriveType == DriveType.CDRom)
                    {
                        continue;
                    }
                    totalSize += drive.TotalSize;
                    freeSize += drive.TotalFreeSpace;
                    if (drive.Name.StartsWith(System.Environment.SystemDirectory.Substring(0, 2)))
                    {
                        CTotalSize += drive.TotalSize;
                        CFreeSize += drive.TotalFreeSpace;
                    }
                }
                SysDiskUsePercent = (CTotalSize - CFreeSize) / (double)CTotalSize * 100;
                DiskUsePercent = (totalSize - freeSize) / (double)totalSize * 100;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Log.WriteLog(ex.Message);
            }
        }
        public static void Init()
        {
            //如有取数之前进行的业务可放在这里,提高性能
            initDiskInfo();
        }
        public static double GetSysInfo(string InfoKey)
        {
            try
            {
                if (dic.ContainsKey(InfoKey))
                {
                    return dic[InfoKey].NextValue();
                }
                else
                {
                    if (InfoKey == "SysDiskUsePercent")
                    {
                        return SysDiskUsePercent;
                    }
                    else if (InfoKey == "DiskUsePercent")
                    {
                        return DiskUsePercent;
                    }
                    else
                    {
                        return -1;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Log.WriteLog(ex.Message);
                return -1;
            }
        }
    }
}

  

<appSettings>
    <!--CPU使用率-->
    <add key="S_CPU" value="Processor#% Processor Time#_Total#IsCounter"/>
    <!--网站连接数-->
    <add key="S_WEB_PORT" value="Web Service#Anonymous Users/sec#默认网站#IsCounter"/>
    <!--数据库连接数-->
    <add key="S_CONNECT" value="SQLServer:General Statistics#User Connections##IsCounter"/>
    <!--实施人员可以无视MS TCP Loopback interface-->
    <add key="ReceiveDataInfo1" value="Network Interface#Bytes Received/sec#MS TCP Loopback interface#IsCounter"/>
    <add key="SentDataInfo1" value="Network Interface#Bytes Sent/sec#MS TCP Loopback interface#IsCounter"/>
    <!--网卡接受字节速率-->
    <add key="S_FLOW_IN" value="Network Interface#Bytes Received/sec#Realtek PCIe GBE Family Controller#IsCounter"/>
    <!--网卡发送字节速率-->
    <add key="S_FLOW_OUT" value="Network Interface#Bytes Sent/sec#Realtek PCIe GBE Family Controller#IsCounter"/>
    <!--与WIN2003任务管理器性能选项卡 右下角的数据相同    与WIN7此处数据不同
    % Committed Bytes In Use
    是 Memory\\Committed Bytes 与 Memory\\Commit Limit 之间的比值。
    Committed memory 指如果需要写入磁盘时已在页面文件中保留空间的处于使用中的物理内存。
    Commit Limit 是由页面文件的大小而决定的。如果扩大了页面文件,该比例就会减小。
    这个计数器只显示当前百分比;它不是一个平均值。-->
    <add key="S_MERMORY" value="Memory#% Committed Bytes In Use##IsCounter"/>
    <!--数据库连接字符串-->
    <add key="SQLConnStr" value="Data Source=192.168.1.20;uid=sa;pwd=nj0819;Initial Catalog=CCMS_SH" />
    <!--当前监视的服务器-->
    <add key="ServerID" value="1" />
  </appSettings>

  

时间: 2024-09-08 21:27:28

利用windows性能计数器进行服务器性能监控的相关文章

利用SNMP和监控宝实现vps服务器性能监控

再我们管理服务器时候windosw系统较为直观,cpu使用多少,内存用了多少带宽等等 只要在远程桌面里 的任务管理器一目了然.但是在linux环境下就没那么轻松了,尤其服务器或者vps上运行的是大型网站,如果不能及时发现服务器性能消耗,很有可能导致网站在访问高峰期,出现卡死都不知道什么情况.那么就老鹰就介绍下如何利用SNMP加监控宝实现vps性能监控,测试平台CentOS. 1.我们需要安装一个组件 NET-SNMP 命令如下: yum install net-snmp net-snmp-dev

利用SNMP和监控宝实现linux vps 服务器性能监控

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在我们管理服务器时候windosw系统较为直观,cpu使用多少,内存用了多少带宽等等 只要在远程桌面里 的任务管理器一目了然.但是在linux环境下就没那么轻松了,尤其服务器或者vps上运行的是大型网站,如果不能及时发现服务器性能消耗,很有可能导致网站在访问高峰期,出现卡死都不知道什么情况.今天介绍下如何利用SNMP加监控宝实现vps性能监控

服务器性能监控之性能计数器

文章来源:http://blog.csdn.net/lhfzd2004/article/details/1722379 上一篇文章<服务器性能监控之WMI>介绍了通过远程com获取服务器性能(当然也可用于本地),那么这篇主要说说windows系统自带的性能监视功能----->performancecouonter. 打开管理工具-->性能,我们可以立即看到服务器的CPU,进程运行时间,磁盘容量等性能参数走势图.然而不仅仅是这几项,我们可以通过添加技术器来查看其他的性能指标: 如果你

linux中SNMP+监控宝实现简单的服务器性能监控

监控宝推荐使用NET-SNMP,所以本文也以此为例.   首先,我们安装NET-SNMP.    代码如下 复制代码 yum install net-snmp net-snmp-devel net-snmp-utils   接下来我们开始配置NET-SNMP.   在配置之前,我们需要先确认已关闭SELinux(CentOS系统注意),然后,先暂时停止NET-SNMP    代码如下 复制代码 service snmpd stop   然后,添加一个只读账户(如vpsaa.com),创建一个密码

利用Windows性能计数器(PerformanceCounter)监控

一.概述 性能监视,是Windows NT提供的一种系统功能.Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器.性能对象,就是被监视的对象,典型例子有Processor.Process.Memory.TCP/UDP/IP/ICMP.PhysicalDisk等.计数器通常提供操作系统.应用程序.服务.驱动程序等的性能相关信息,以此来分析系统瓶颈和对系统及应用程序性能进行诊断和调优.性能计数器机制让应用程序和操作系统组件可以

5款服务器性能监控神器介绍 (smokeping、cacti、nagios、zabbix、ntop)

1. smokeping Smokeping 是rrdtool 的作者Tobi Oetiker 的作品,是用Perl 写的,主要是监视网络性能,包括常规的ping,用echoping监控www 服务器性能,监视dns 查询性能,监视ssh 性能等.底层也是rrdtool做支持,特点是画的图非常漂亮,网络丢包和延迟用颜色和阴影来表示.在企业中运用较少. 2 cacti Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. 简单的说Cacti 就是一个PH

服务器性能监控之WMI

1.WMI简介 WMI是英文WindowsManagementInstrumentation的简写,通过使用WMI,我们可以获取本地或远程服务器的性能参数和进程运行情况,以及大部分硬件信息,但前提是运行的用户要有足够的权限,如administrator组用户等.这也是做负载均衡所需要且比较方便快捷的途径. 2.使用时首先添加System.Management.dll,然后引用 usingSystem.Management; 3.定义远程访问 publicclassManagementConnec

服务器性能监控+邮件发送

客户端代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.ServiceProcess; using System.Text; using System.Threading; using System.Management; using System.Configuratio

利用windows 2003实现服务器群集的搭建与架设(一) NLB群集的创建与架设

实验场景: 西安凌云系统高科技有限公司利用IIS搭建了一个WEB站点,域名为nlb.angeldevil.com.由于业务的逐渐增加,网站速度也越来越慢,而且经常出现故障,为公司的利益带来了很多的不便:公司决定使用两台WEB站点为客户机提供访问.因此我们采用了网络负载均衡技术.两台服务器的IP地址是:192.168.1.10和192.168.1.20:而群集所使用的IP地址是192.168.1.30.为了在两台NLB群集的主机上相互管理群集:在DC和DC(两个服务器)成员上分别各添加一个网卡:I