zoukankan      html  css  js  c++  java
  • 利用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>
    

      

  • 相关阅读:
    Python super() 函数
    Python中的多继承
    sub eax, _PAGESIZE; decrease by PAGESIZE test dword ptr [eax],eax ; probe page
    ubuntu中的samba配置
    linux 相关命令
    Program Size: Code=x RO-data=x RW-data=x ZI-data=x 的含义
    结构之法,算法之道:程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
    C++ 构造函数和析构函数
    C++ 友元函数总结
    C++ 动态存储空间的分配和释放 new与malloc的区别
  • 原文地址:https://www.cnblogs.com/liulun/p/2223485.html
Copyright © 2011-2022 走看看