본문 바로가기

Windows/기술과 팁

명령어를 이용해 Windows 시스템의 성능모니터링 하기


UNIX 시스템에 관심이 있으신 분은 iostat 이라는 명령어를 알고 계실 것이다. CUI (Command line User Interface) 상에서 UNIX 시스템의 성능 정보를 보여주는 명령어인데, Windows 시스템에도 이와 같은 명령어가 있다. 이 명령어는 윈도우 시스템의 성능모니터링 도구인 perfmon.msc 에서 사용하는 것과 동일하다. 즉, GUI인 perfmon.msc 를 CUI로 구현한 것이라고 생각하면 쉽다.

예제를 통해 사용법을 알아 보자.

아래와 같이 입력하면 현재 CPU 사용율을 보여준다.

C:\>typeperf "\Processor(*)\% Processor Time"

이 명령을 실행하면 아래와 같이 CPU 사용율이 1초 간격으로 계속 출력된다. 값이 3개인 이유는, 컴퓨터 CPU의 개수가 2개이거나 또는 core가 2개 이므로 cpu0번 사용율, cpu1번 사용율, cpu 전체 평균사용율을 순서대로 출력해주고 있는 것이다. 모니터링을 끝내고자 할 때에는 ctrl+c를 누른다.

사용자 삽입 이미지

주기가 1초 간격으로 너무 짧기에, 3초 간격을 주고, 결과를 perfmon.msc에서 볼 수 있도록 csv 형식으로 저장하고자 한다면 아래와 같은 명령어를 사용하면 된다.

C:\>typeperf "\Processor(*)\% Processor Time" -si 3 -o CPU.csv

10개의 결과만 보고 싶다면 아래와 같은 명령어를 사용한다.

C:\>typeperf "\Processor(*)\% Processor Time" -sc 10
사용자 삽입 이미지

간단하게 사용법을 알아 봤다.
위에서 CPU는 0, 1, total 의 3가지 instance를 가지고 있다. 그렇다면 0번 CPU의 사용율만 보고 싶다면 어떻게 할까.. 먼저 모니터링을 하고자 하는 카운터가 어떤 인스턴스를 가지고 있는지 알아야 한다.

CPU 성능 카운터가 어떤 인스턴스를 가지고 있는지 쿼리 해주는 명령어는 아래와 같이 하면 된다.

C:\>typeperf -qx \Processor
사용자 삽입 이미지

위 결과를 보면 알수 있겠지만, -qx 옵션은 카운터에 인스턴스가 있을 경우, 해당되는 인스턴스의 리스트를 보여주는 옵션인 것을 알 수 있다.

0번 CPU의 사용율을 보고자 한다면 아래과 같이 해준다.
C:\>typeperf "\Processor(0)\% Processor Time"
사용자 삽입 이미지


개개 인스턴스는 필요없고 Processor 항목의 카운터는 어떤 것이 있는지 알기 위해서는 -q 옵션을 사용한다. 아래는 Processor 항목의 성능 카운터 종류를 보여준다.

C:\>typeperf -q \Processor

모든 항목에 대해 인스턴스 없이 성능 카운터 종류를 보고 싶다면 아래와 같이 명령을 주면 된다.
C:\>typeperf -q

마찬가지로 모든 항목에 대해 각 인스턴스의 리스트를 보고 싶다면 아래와 같이 명령을 주면 된다.
C:\>typeperf -qx


두 개 이상의 성능 항목을 볼 수는 없을까... 당연히 가능하다.
CPU사용율과 논리적 디스크 IO 양의 상관관계를 알고 싶을 경우 아래와 같은 명령어를 사용하면 두 항목의 성능카운터를 보여준다.

typeperf "\Processor(*)\% Processor Time" "\LogicalDisk(*)\Disk Bytes/sec"
사용자 삽입 이미지


이외에도 몇 가지 사용 예를 들면,

프로세서 및 메모리 카운터를 표시.
typeperf "\Memory\Available bytes" "\processor(_total)\% processor time"

Explorer 프로세스 카운터를 CSV 출력 파일 형식으로 3초마다 표시.
typeperf "\Process(Explorer)\Thread Count" -si 3 -o typeperf.csv

Server_name 컴퓨터의 RAS 카운터의 샘플 50개를 표시.
typeperf "\RAS port(LPT1)\Bytes Transmitted" -sc 50 -s Server_name

input.txt 파일에 표시된 카운터의 샘플 50개에 대한 카운터 값을 120초의 샘플 간격으로 표시.
typeperf -cf input.txt -si 120 -sc 50 -f TSV -o domain2.tsv

인스턴스와 함께 설치된 카운터를 쿼리. -qx 매개 변수가 -q 매개 변수보다 훨씬 큰 수의 성능 카운터를 반환한다.
typeperf -qx

Server5 컴퓨터에서 인스턴스 없이 물리적 디스크 카운터를 쿼리하고 diskctrs.txt라는 파일에 그 결과를 기록.
typeperf -q \\Server5\PhysicalDisk -o diskctrs.txt

이와 같은 방법을 응용하면, 스크립트로 만들어 놓고 스케쥴러와 같이 일정 주기로 시스템의 성능 데이터를 수집할 수 있게 된다.



사용설명서의 내용을 아래에 정리한다.

typeperf
성능 카운터 데이터를 명령 창이나 지원되는 로그 파일 형식에 기록합니다. typeperf를 중지하려면 Ctrl+C를 누릅니다.

구문
Typeperf [Path [path ...]] [-cf FileName] [-f {csv|tsv|bin}] [-si interval] [-o FileName] [-q [object]] [-qx [object]] [-sc samples] [-config FileName] [-s computer_name]

매개 변수
-c {Path [path ...] | -cf FileName}
성능 카운터 경로를 로그로 지정합니다. 여러 카운터 경로를 표시하려면 각 명령 경로를 공백으로 구분합니다.
-cf FileName
모니터할 카운터 경로가 있는 파일 이름 줄마다 지정합니다.
-f {csv|tsv|bin}
출력 파일 형식을 지정합니다. 파일 형식은 csv(쉼표 구분 형식), tsv(탭 구분 형식), bin(이전 형식)입니다. 기본 형식은 csv입니다.
-si interval [mm:] ss
예제 사이의 시간을 [mm:] ss 형식으로 지정합니다. 기본값은 1초입니다.
-o FileName
출력 파일의 경로 이름을 지정합니다. 기본값은 stdout입니다.
-q [object]
인스턴스 없이 사용할 수 있는 카운터를 표시하고 쿼리합니다. 한 개체에 대한 카운터를 표시하려면 개체 이름을 포함합니다.
-qx [object]
인스턴스와 함께 사용할 수 있는 모든 카운터를 표시하고 쿼리합니다. 한 개체에 대한 카운터를 표시하려면 개체 이름을 포함합니다.
-sc samples
수집할 샘플 수를 지정합니다. 기본값은 Ctrl+C를 누를 때까지의 샘플 수입니다.
-config FileName
명령줄 매개 변수가 있는 설정 파일의 경로 이름을 지정합니다.
-s computer_name
서버가 카운터 경로에 지정되어 있지 않으면 모니터할 시스템을 지정합니다.
/?
명령 프롬프트에서 도움말을 표시합니다.
설명
카운터 경로 형식
카운터 경로의 일반적인 형식은 다음과 같습니다. [\\Computer]\object[parent/instance#index]\counter] where:

형식의 부모, 인스턴스, 인덱스 및 카운터 구성 요소는 유효한 이름이나 와일드카드 문자를 포함할 수 있습니다. 컴퓨터, 부모, 인스턴스 및 인덱스 구성 요소의 경우 모든 카운터에 필요하지는 않습니다.

사용할 카운터 경로를 카운터 자체에 기반하여 확인합니다. 예를 들어, LogicalDisk 개체에는 index 인스턴스가 있어 #index 또는 와일드카드를 제공해야 합니다. 그러므로 다음 형식을 사용할 수 있습니다.
\LogicalDisk(*/*#*)\*

비교적으로 Process 개체는 index 인스턴스가 필요하지 않습니다. 그러므로 다음 형식을 사용할 수 있습니다.
\Process(*)\ID Process

다음은 사용할 수 있는 형식 목록입니다.
\\machine\object(parent/instance#index)\counter
\\machine\object(parent/instance)\counter
\\machine\object(instance#index)\counter
\\machine\object(instance)\counter
\\machine\object\counter
\object(parent/instance#index)\counter
\object(parent/instance)\counter
\object(instance#index)\counter
\object(instance)\counter
\object\counter

와일드카드 문자가 부모 이름에 지정되면 지정된 인스턴스 및 카운터 필드에 일치하는 지정된 개체의 모든 인스턴스가 반환됩니다.

와일드카드 문자가 인스턴스 이름에 지정된 경우, 지정된 인덱스에 해당하는 모든 인스턴스 이름이 와일드카드 문자와 일치하면 지정된 개체 및 부모 개체의 모든 인스턴스가 반환됩니다.

와일드카드 문자가 카운터 이름에 지정되면 지정된 개체의 모든 카운터가 반환됩니다.

부분적인 카운터 경로 문자열은(예: pro*) 지원되지 않습니다.

쿼리 형식
카운터 경로의 경우 쿼리는 Typeperf [{-q | -qx [\\Computer\] [object] [-o outputfile}] 형식을 사용합니다.

다음 명령줄을 사용하여 쿼리를 완성합니다.
Typeperf [\\Computer]\object[instance]\counter]

Typeperf -cf input file

-config 옵션 사용
-config 옵션과 함께 사용하는 설정 파일의 내용은 다음 형식을 사용해야 합니다.

[command_option]

value

여기서 command_option은 명령줄 옵션이고 value는 그 값을 지정합니다. 예를 들면 다음과 같습니다.
[-c]
\Windows\mypath
[-o]
report.csv
[-s]
mysystem

typeperf를 Windows Management Instrumentation(WMI) 스크립트에 통합하는 데 대한 자세한 내용은 Microsoft Windows Resource Kits Web site(http://www.microsoft.com/)에서 스크립트 로그 및 모니터링을 참조하십시오.