• 利用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>
    

      

  • 相关阅读:
    小程序开发-7-访问api数据与ES6在小程序中的应用
    小程序开发-8-流行页面编码与组件的细节知识
    小程序开发-6-组件数据、事件与属性
    当安装mongodb客户端出现了Failed to load list of databases
    对bluebird的理解
    百度地图实现案例
    iScroll实现下拉刷新上拉加载
    nodejs环境变量配置
    检测Python程序本身是否已经在运行
    用Python快速找到出现次数最多的数据
  • 原文地址:https://www.cnblogs.com/liulun/p/2223485.html
Copyright © 2020-2023  润新知