1.WMI简介
WMI是英文Windows Management Instrumentation的简写,通过使用WMI,我们可以获取本地或远程服务器的性能参数和进程运行情况,以及大部分硬件信息,但前提是运行的用户要有足够的权限,如administrator组用户等。这也是做负载均衡所需要且比较方便快捷的途径。
2.使用时首先添加System.Management.dll,然后引用
using System.Management;
3.定义远程访问
4.获取CPU,内存,网络流量等信息
public class Monitor
...{
private string username = "";
private string pwd ="";
private string ip = "";
ManagementConnectPool mcp;
WMSServerClass server;
public Monitor(string username,string pwd,string ip)...{
this.username = username;
this.pwd = pwd ;
this.ip = ip;
mcp = new ManagementConnectPool(username,pwd,"\root\cimv2",ip);
server = new WMSServerClass();
}
WMI方式获取网卡流量#region WMI方式获取网卡流量
private void getNetWorkFlow()
...{
ManagementObjectCollection moc = mcp.getQueryResult(@"select * from Win32_NetworkAdapter where macaddress<>null and manufacturer<>'Microsoft'");
string[] list = new string[moc.Count] ;
foreach(System.Management.ManagementObject mymac in moc)
...{
string a = mymac["Speed"].ToString();//null WMI未实现该属性
Console.WriteLine(a.ToString());
}
}
#endregion
WMI方式获取CPU信息#region WMI方式获取CPU信息
private void getCpuInfo()
...{
ManagementObjectCollection moc = mcp.getQueryResult("select * from Win32_Processor");
string[] list = new string[moc.Count];
int i = 0;
foreach(ManagementObject mo in moc)
...{
string total = mo.GetPropertyValue("LoadPercentage").ToString();
list[i]=total;
i++;
}
}
#endregion
WMI方式获取内存使用率#region WMI方式获取内存使用率
public string getMemoryUsage()
...{
ManagementObjectCollection moc = mcp.getQueryResult("select * from Win32_LogicalMemoryConfiguration");
int totalm = 1; int avilablem = 1;
foreach(ManagementObject mo in moc)
...{
string total = mo.GetPropertyValue("TotalPhysicalMemory").ToString();
totalm = int.Parse(total);
}
moc = mcp.getQueryResult("select * from Win32_PerfRawData_PerfOS_Memory");
foreach(ManagementObject mo in moc)
...{
string avilable = mo.GetPropertyValue("AvailableKBytes").ToString();
avilablem = int.Parse(avilable);
}
int usedm = totalm - avilablem;
double memoryusage = (double)usedm * (double)100 / (double)totalm ;
return memoryusage.ToString();
}
#endregion
}
5.获取本地机器信息(WEB)
1.如何用WMI获得指定磁盘的容量#region 1.如何用WMI获得指定磁盘的容量
private string DriveType(string type)
...{
string rtntype="";
switch (type)
...{
case "1":
rtntype="Not Type";
break;
case "2":
rtntype="Floppy disk";
break;
case "3":
rtntype="Hard disk";
break;
case "4":
rtntype="Removable drive or network drive";
break;
case "5":
rtntype="CD-ROM";
break;
case "6":
rtntype="RAM disk";
break;
default :
break;
}
return rtntype;
}
private void Button1_Click(object sender, System.EventArgs e)
...{
SelectQuery query=new SelectQuery("Select * From Win32_LogicalDisk");
ManagementObjectSearcher searcher=new ManagementObjectSearcher(query);
foreach(ManagementBaseObject disk in searcher.Get())
...{
Response.Write(disk["Name"] +" "+DriveType(disk["DriveType"].ToString()) + " " + disk["VolumeName"]+"<br>");
}
}
#endregion
2.如何用WMI获得指定磁盘的容量#region 2.如何用WMI获得指定磁盘的容量
private void Button2_Click(object sender, System.EventArgs e)
...{
ManagementObject disk = new ManagementObject("win32_logicaldisk.device>
通过上面介绍的方法,可以很轻松的获取远程或本地机器的性能,进程和硬件信息等。另外:WMI也可以通过使用Vbscript等脚本调用。
说明:其中部分资源来自网友小山的blog。但不够详细说明WMI在服务器性能方面的能力!