>  기사  >  백엔드 개발  >  C# 서버 성능 모니터링을 위한 WMI 코드 예제에 대한 자세한 설명

C# 서버 성능 모니터링을 위한 WMI 코드 예제에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-15 10:07:053299검색

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;
        }
    }

5. 로컬 머신 정보 가져오기(WEB)

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<>&#39;Microsoft&#39;");
            
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.