1.WMI소개
WMI는 영어 Windows Management Instrumentation의 약어입니다. WMI를 사용하면 로컬 또는 원격의 성능 매개변수와 프로세스 작동 상태를 얻을 수 있습니다. 그리고 대부분의 하드웨어 정보는 실행 중인 사용자에게 관리자 그룹 사용자 등 충분한 권한이 있어야 한다는 전제가 있습니다. 이는 로드 밸런싱을 수행하는 편리하고 빠른 방법이기도 합니다.
2. 사용시 먼저 System.Management.dll을 추가한 후 참조
using System.Management;
3.
4. CPU, 메모리, 네트워크 트래픽 및 기타 정보 가져오기public class ManagementConnectPool ... { private static System.Management.ConnectionOptions Conn = new ConnectionOptions() ; private static ManagementObjectSearcher mos = new ManagementObjectSearcher(); private string username = ""; private string pwd = ""; private string space=""; private string server = ""; public ManagementConnectPool( string mpusername, string mppwd , string mpspace , string mpserver) ... { this .username = mpusername; this .pwd = mppwd; this .space = mpspace; this .server = mpserver; Conn.Username = mpusername; Conn.Password = mppwd; string scopestring ="//" + mpserver + mpspace; System.Management.ManagementScope Ms = new ManagementScope(scopestring); Ms.Connect(); mos.Scope = Ms; } public ManagementObjectCollection getQueryResult( string queryString) ... { ObjectQuery oq = new ObjectQuery(); oq.QueryString = queryString; mos.Query = oq; ManagementObjectCollection moc =mos.Get(); return moc; } }
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 }
Vbscript와 같은 스크립트를 사용하여 WMI를 호출할 수도 있습니다.
참고: 일부 자료는 네티즌小山 블로그에서 가져왔습니다. 그러나 서버 성능 측면에서 WMI의 기능에 대한 세부 정보가 충분하지 않습니다.
위 내용은 C# 서버 성능 모니터링을 위한 WMI 코드 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!