Windows Task Manager 에 대한설명을 검색하다 나온 자료이담.
대부분의 개발자 또는 사용자들이 Windows에서 프로세스의 상태를 확인하기 위해서 작업관리자를 이용합니다. 2000에 이르러서 그 기능이 막강해졌고 Vista에 이르러서는 거의 환상적으로 변했습니다. 물론 Mark Russinovich가 만든 ProcessExplorer 같은 막강한 Freeware도 존재하지만...
Windows 작업 관리자가 표시해주는 내용에 대해서 정확히 모르는 경우가 많이 있는것 같습니다. 또한 약간의 설정으로 시스템의 상태를 좀더 자세히 파악할 수 있는데 그부분에 대해서 설명을 드리겠습니다.
커널 시간 표시
"CPU사용"의 그래프를 보면 붉은 그래프가 함께 보이고 있는데 이부분은 KernelMode에서 사용된 CPU를 보여주는 것입니다. 위의 화면(성능 텝이 활성화된..)에서 보기메뉴를 선택하면 "커널 시간 표시"라는 메뉴가 나옵니다. 반드시 선택하시기 바랍니다. CPU 사용이 증가하는 구간에서 UserMode, KernelMode 어느곳에서 사용량이 증가되었는지 알 수 있기 때문입니다.
* 약간은 다른 내용이지만 만약 단일 프로세스상에서 동기화를 위해서 Mutex 커널오브젝트(KernelObject)를 사용한다면 UserMode에서 KernelMode 또는 그반대로의 전환을 위한 많은 작업들을 거치게 되면서 CPU를 시간을 낭비하게 됩니다. 이런 경우 처럼 단일 프로세스에서의 스레드 동기화를 구현하려면 CritcalSection등의 SpinLock류의 UserMode 동기화 객체를 이용해서 쓸데없이 Mode를 전환하는데 사용되는 CPU시간를 막는 것이 좋습니다.
PF 사용
가장 많이 혼동하시는 부분이 "CPU사용" 하단의 "PF사용" 부분입니다. 2000에서는 이것을 "Mem Usage"라고 메모리사용(부과 메모리)으로 표기하여 대부분의 사용자들이 실제 RAM(Physical Memory)의 사용량으로 알고 계십니다. 하지만 이부분은 Virtual Address 환경에서 할당된 PageFile들의 전체 크기를 말하는 것입니다.
위 그림에서는 520MB의 물리적인 메모리를 사용하고 있다는 이야기가 아니고 520MB만큼의 PageFile이 사용되고 있다는 이야기 입니다. (상단의 붉은 박스는 동일한 PF값을 나타내고 있다. 520MB = 533300KByte로 전자는 1000B를 1K로 후자는 1024B를 1K 표시한것이다.)
* PageFile에 대해서 부연 설명을 드리면 CPU가 연산을 위해 데이터에 접근할때에 해당 데이터는 Phycicam Memory, 즉 RAM에 존재해야겠죠. 만약 해당 데이터가 들어있는 PageFile이 RAM에 존재하지 않고 Disk상에 위치하고 있다면 PageFault가 발생하게 되면서 Disk상에 존재하고있는 해당PageFile을 RAM으로 불러들이는(Page In) 작업이 수행됩니다.
더불어 RAM의 공간이 모자라면 최근에 사용되지 않았던 Hit Ratio가 낮은 PageFile을 반대로 Disk로 보내는(Page Out) 작업이 수행됩니다.
물리적인 RAM이 부족한 시스템이라면 이러한 PageFile의 Swap(Page In/Out)작업때문에 성능이 저하되겠죠. 이러한 성능저하 현상을 Thrashing이라고 합니다.(스레드들이 서로간에 Context Switching에 시간을 소모해서 원래의 작업을 못하고 성능저하가 발생하는 경우도 Thrasing이라고 한다.)
전체
핸들"(Handle), "스레드"(Thred), "프로세스"(Process). 각각 현재 OS에서 사용중인 전체 개수를 표시해주는 부분입니다.실제메모리
실제 PC에 설치되어있는 물리적인 메모리인 RAM의 상태를 표시해 주는 부분입니다. "전체" 장착되어있는 RAM의 전체 크기. "사용 가능" CPU가 사용가능한 RAM의 크기. "시스템 케시" 파일케시와 OS, Application등 전체 시스템에서 사용하는 RAM의 크기.할당된메모리
가상메모리(Virtual Memory)를 말해주는 부분으로 Disk, Ram상에 존재하는 전체 PageFile을 표시하는 부분입니다. "전체" 현재 할당된 가상메모리 크기. "한도" 총 페이징 파일의 최대 크기.(시스템->고급->성능옵션->고급->가상메모리 에서 설정한 페이징 파일의 최대 크기입니다.) "최고" 부팅이후에 할당되었던 가상메모리중에서 최고치 값커널 메모리
"전체" OS 커널에서 사용중인 메모리의 크기(페이지됨 + 페이지 안 됨) "페이지됨"(Paged) 커널이 할당한 가상메모리 상태에서의 할당(PageFile)한 크기. "페이지 안됨"(Nonpaged) 커널이 물리메모리(RAM)상에 직접 할당한 크기. * 커널이 동작하기 위해선 일부 코드들은 직접 RAM상에 위치해야합니다. 예를 들면 가상메모리 환경에서 Page Directory와 Page Table을 통해서 실제메모리의 PageFrame에 접근하도록 가상메모리를 구현하는 코드 자신은 정작 가상메모리에 위치하고 있을 수 없겠죠. 이러한 코드들은 항상 RAM에 직접 위치해 있게 됩니다.메모리 사용 (Working Set)
프로세스의 구동을 위한 'EXE과 DLLs'의 'Code와 Data' 에서 실제 물리메모리(RAM)에 존재(Page In)하는 메모리의 크기.VM 크기 (Private Bytes)
프로세스의 구동을 위한 'EXE과 DLLs'의 'Code와 Data' 에서 다른 프로세스와 공유 할 수 없는 Commit(Page In, Out 모두)된 메모리의 크기.Virtual Size (Virtual Bytes)
프로세스의 구동을 위한 'EXE과 DLLs'의 'Code와 Data' 에서 공유 가능한 영역과 불가능한 모든 영역의 가상 메모리(Commit, Reserved 모두)의 크기.
[다른 인용자료]
Process: Private Bytes: (Inetinfo, Dllhost) ? 이 카운터는 Inetinfo가 할당했으며 다른 프로세스와 공유할 수 없는 현재의 메모리 양을 측정합니다. 이 카운터는 이러한 프로세스가 긴 기간 동안 메모리를 릴리스하지 않고 시스템에 더 많은 메모리를 할당하고 있다는 사실을 알았을 때 웹 응용 프로그램의 메모리 누수를 격리시키는 데 도움이 됩니다. 응용 프로그램의 격리 수준이 낮게 설정되면 Private Bytes 카운터에서 Inetinfo 프로세스를 모니터링하십시오. 격리 수준이 보통이거나 높게 설정되면 해당 DLLHost 프로세스를 모니터링하십시오.
System: Processor Queue Length ? 이 카운터는 프로세스 대기열에서 실행을 기다리는 스레드의 수를 나타냅니다. 프로세스가 여러 개 있는 컴퓨터에서도 프로세스 시간을 기다리는 준비 대기열은 하나만 있습니다. 이 카운터는 실행 중인 스레드가 아니라 준비 스레드만 계산합니다. 프로세서당 스레드가 2개가 넘는 프로세서 대기열 길이는 서버가 느리게 작동하거나 응답하지 않는 프로세서 정체 상태를 나타낼 수 있습니다. 여러 프로그램 프로세스가 프로세서 시간을 위해 경쟁하는 경우 더 빠른 프로세서를 설치하여 처리량을 향상시킬 수 있습니다. 멀티스레드 프로세스를 실행하는 경우에는 프로세서를 추가하는 것이 도움이 될 수 있지만 이러한 경우에 얻을 수 있는 이점은 제한되어 있습니다.
MS 인용 자료
"프로세스에서 메모리 누수가 발생하는지 확인하려면 Windows 성능 모니터(Perfmon.exe)를 사용하여 해당 응용 프로그램 프로세스 아래의 "Private Bytes"를 모니터합니다. Privates Bytes는 프로세스에 할당되었지만 다른 프로세스와 공유하지 않는 총 메모리입니다. 참고로, 모니터와 관련된 "Virtual Bytes"와는 다릅니다. Virtual Bytes는 프로세스가 사용하는 가상 주소 공간의 현재 크기를 바이트로 나타낸 것입니다. 응용 프로그램은 가상 메모리가 누수될 수 있지만 할당된 Private Bytes의 양에서 차이를 알 수 없습니다. Private Bytes를 모니터할 때 메모리가 늘어나는 것으로 표시되지는 않지만 계속 메모리가 부족한 것으로 생각되는 가상 바이트를 모니터하여 가상 메모리가 소모되는지 확인해야 합니다.
응용 프로그램에서 메모리가 누수되는지 확인하려면 많이 반복되는 루프에 대상 코드를 추가하고 Private Bytes와 Virtual Bytes의 메모리가 증가하는지 모니터합니다. Private Bytes와 Virtual Bytes의 수가 동일하게 유지되지 않고 증가를 멈추는지 살펴봅니다. 메모리가 증가를 멈추는 지점이 있는 경우, 즉 무한히 증가하지 않으면 메모리 누수를 볼 수는 없지만 일부 캐시가 최대 크기로 증가하는 것을 알 수 있습니다. "
아래 링크 자료도 참조 하시면 도움이 되실 것입니다.
덤프 힙 로그를 자동으로 생성하는 경고를 만들어 메모리 누수 문제를 해결한다
( http://support.microsoft.com/default.aspx?scid=kb;ko;290620 )
댓글 없음:
댓글 쓰기