IT STORYs
특정 프로세서의 메모리 사용량 모니터해보기 (WMI이용하기) [출처] 특정 프로세서의 메모리 사용량 모니터해보기 (WMI이용하기)|작성자 토이 본문
특정 프로세서의 메모리 사용량 모니터해보기 (WMI이용하기) [출처] 특정 프로세서의 메모리 사용량 모니터해보기 (WMI이용하기)|작성자 토이
295~ 2008. 3. 10. 09:50오늘은 WMI와 NotifyIcon을 이용하여 특정 프로세서의 메모리 사용랑 모니터 해보기로
하겠습니다.
제가 근무하는 곳에서 특정 데몬 프로세서가 있는데 이 친구가 가끔 특정치의 메모리 사용을
하게 되면 가끔 오작동을 해버립니다. 그래서 그 특정치가 되는 순간을 모니터링을 하기 위해
위와 같은 프로그램을 만들어 보았습니다.
1. 부터 메모리 사용량을 가져오는 메서드를 만들어보겠습니다.
WMI를 이용하였고 아시겠지만 System.Management를 using해줘야 합니다.
public string GetIcMessengerWorkingSet()
{
ConnectionOptions co = new ConnectionOptions();
co.Username="계정";
co.Password= "패스워드";
System.Management.ManagementScope ms =
new System.Management.ManagementScope(@"\\172.30.15.215\root\cimv2", co);
string strResult = string.Empty;
ManagementPath path = new ManagementPath( "Win32_Process");
//Get the object on which the method will be invoked
ManagementClass processMangement = new ManagementClass(ms,path,null);
ManagementObjectCollection col = processMangement.GetInstances();
string strCaption ="";
bool chkZero = false;
foreach(ManagementObject mo in col)
{
strCaption = (string)mo["Caption"];
if(strCaption=="icMessengerSrv.")
{
uint res01 = (uint)mo["PeakWorkingSetSize"];
UInt64 res02 = (UInt64)mo["WorkingSetSize"];
UInt64 temp = res02/1024;
UInt64 temp1 = res02/1024/1024;
chkZero = true;
strResult = temp1.ToString();
}
}
if(!chkZero)
{
strResult = "--";
}
processMangement.Dispose();
col.Dispose();
return strResult;
}
저 같은 경우 172.30.15.215에 해당 하는 컴퓨터의 프로세서중에서 icMessengerSrv.로 실행되는 놈의 메모리 사용량을 알아 보도록 하겠습니다.
WMI를 콜하기위해서는 관리자 정도의 계정이 필요하니 유의 하세요.
위와 같이 폼 디자인 해주고 로드이벤트시
아래와 같이 코드를 작성합니다
private void Form1_Load(object sender, System.EventArgs e)
{
string temp = "icMessengerWorkingSet : \r\n"+ GetIcMessengerWorkingSet()+"MB";
notifyIconStatus.Text = temp;
notifyIconStatus.Visible= true;
notifyIconStatus.ContextMenu = contextMenu1;
this.Visible = false;
this.ShowInTaskbar = false;
timer1.Start();
}
참고로 timer의 인터발은 120000 (2분)으로 주었습니다.
contextMenu1에서 하나의 메뉴를 만들로 "종료"라고 이름을 넣습니다.
그 종료 메뉴를 넣고 더블클릭을 하면 이벤트 헨들러를 작성해야하는데 아래와 같이 작성합니다.
private void menuItem1_Click(object sender, System.EventArgs e)
{
DialogResult dr = MessageBox.Show("종료하시겠습니까?","물음",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if(dr == DialogResult.Yes)
{
bExit = true;
this.Close();
}
}
그리고 폼의 종료시점에서 종료할지 notification Icon을 작동할지를 판단해야 하므로 closing이벤트 헨들러를 아래와 같이 작성합니다.
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if(!bExit)
{
timer1.Stop();
e.Cancel = true;
this.Visible = false;
notifyIconStatus.Visible = true;
}
else
{
notifyIconStatus.Visible = false;
}
}
그리고 timer의 tick이벤트를 작성합니다.
private void timer1_Tick(object sender, System.EventArgs e)
{
string temp = "icMessengerWorkingSet : \r\n"+ GetIcMessengerWorkingSet()+"MB";
notifyIconStatus.Text = temp;
}
그럼 거의 모든것이 완성 되었네요..
이런 코드를 작성하면 어떻게 동작할까요?
결과는 아래와 같습니다.
심슨의 아이콘에서 메모리 사용량이 나타는것이 보이시죠?
본인이 그 시스템의 관리자라면 wmi를 이용하여 컴퓨터를 감시하는 프로그램을 만드는것도
괜찮은것 같습니다.
코드는 그렇게 어렵지 않아서 설명은 생략합니다. 모르시겠으면 질문해주세요..
그럼 이만..
[출처] 특정 프로세서의 메모리 사용량 모니터해보기 (WMI이용하기)|작성자 토이