利用windows性能计数器进行服务器性能监控示例分享
作者:
这篇文章主要介绍了利用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;
}
}
}
}