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>
    

      

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/liulun/p/2223485.html
Copyright © 2011-2022 走看看