prstat (2)


일반적인 서버에서는 수많은 소형 프로세스가 빈번하게 일어나며 각각은 CPU를 적게나마 사용하게 된다. 많은 사용자들이 공유하는 서버와 같은 시스템에서, prstat는 어떤 사용자들이 가장 많은 자원 사용하고 있는지 알아내는 데 사용될 수 있다. 만일 시스템에서 가장 많은 자원을 사용하는 사용자를 알아낼 수 있다면, 적어도 작업의 일부분을 다른 시스템으로 옮길 수도 있을 것이다. 사용자가 자원을 소모하는 통계치를 prstat를 이용해 알아보려면, prstat 명령어에 -a 옵션을 붙이면 된다.

prstat 명령어에 -a 옵션을 붙이면 각 사용자들이 사용하는 프로세서의 개수, CPU의 퍼센테이지, 메모리 사용량 등을 알 수 있다. prstat -s cpu -a -n 8 명령어는 CPU를 사용하고 있는 최상위 8개의 프로세스와 각 사용자별 자원 사용 통계치를 나열해준다.

다음 결과값은 사용자 larry가 대부분의 CPU 자원을 차지하고 있는 것을 보여준다.



kincaid/tartan 43 $ prstat -s cpu -a -n 8

PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
17005 larry 888K 432K run 21 0 0:03.15 38% cpuhog/1
17015 larry 888K 432K run 21 0 0:03.06 36% cpuhog/1
17175 larry 944K 872K run 24 0 0:00.37 5.7% find/1
16911 moe 944K 872K sleep 58 0 0:00.48 3.3% find/1
16915 moe 944K 872K sleep 59 0 0:00.43 3.3% find/1
17849 curly 944K 872K run 31 0 0:00.00 3.0% find/1
16472 root 132M 42M sleep 59 0 0:01.00 0.9% Xsun/1
16827 kincaid 6864K 4704K sleep 48 0 0:00.05 0.4% dtterm/1

NPROC USERNAME SIZE RSS MEMORY TIME CPU

8 moe 8248K 6800K 0.7% 0:01.31 6.6%
3 curly 3336K 2832K 0.3% 0:00.00 3.0%
34 root 213M 95M 9.5% 0:03.05 1.0%
78 kincaid 433M 294M 30% 0:00.38 0.7%

Total: 132 processes, 218 lwps, load averages: 3.90, 4.29, 2.45

kincaid/tartan 44 $


프로세서들의 집합 살펴보기
Solaris 운영체계는 멀티프로세서 머신 상에서 애플리케이션을 작동시키는 데 사용된다. 시스템 관리자는 프로세서 집합이라는 것을 빈번하게 생성한다. 프로세서 집합이란 작업을 부여할 수 있는 CPU의 집합이다. 예를 들어 웹 서버와 애플리케이션 서버를 가동하는 데 사용되는 4개의 CPU를 장착한 머신을 생각해보자. 이 두 작업 간의 CPU 자원을 분배하는 접근 방법 중 하나는 각각 2개의 CPU를 하나로 하는 프로세서 집합을 2개 생성한 후, 하나의 프로세서 집합에는 웹 서버를, 또 하나의 프로세서 집합에는 애플리케이션 서버를 연결시키는 것이다. 이러한 방법은 하나의 서버가 시스템의 모든 CPU 자원을 소비하는 것을 막아준다.

다음에 포함된 것은 2개의 프로세서 집합을 생성하기 위해 사용할 수 있는 명령어 집합들이다.

# psrset -c 0
created processor set 1
processor 0: was not assigned, now 1

# psrset -a 1 1
processor 1: was not assigned, now 1

# psrset -c 2
created processor set 2
processor 2: was not assigned, now

2 # psrset
user processor set 1: processors 0 1
user processor set 2: processor 2

프로세서 집합이 생성된 후, prstat 명령어는 특정 프로세서 집합에 대한 프로세스 결과값만을 검색할 수 있도록 제한해 사용할 수 있다. 이는 -C 옵션을 이용하면 된다. 예를 들어 prstat -C 1 -s cpu라고 명령하면 프로세서 집합 1에만 한정된 프로세스 활동이 출력되며 CPU 점유율 순으로 정렬된다. 이 명령어는 어떤 프로세서 집합에 어떤 프로세스들이 수행되고 있는가를 알아보는 데 매우 유용하다.

프로세서 집합에 대한 CPU 컬럼을 평가하는 것은 프로세서 집합이 얼마나 바쁘게 움직이는지를 판단하는 데에도 유용하게 사용되므로 어떤 프로세서 집합에 어떠한 작업을 부여하는지를 결정할 수 있는 것이다.
단 prstat의 CPU 컬럼은 항상 프로세스가 사용하고 있는 시스템 CPU 자원의 점유율을 출력해주는 것이지 프로세서나 프로세서 집합의 CPU 자원 점유율을 나타내는 것은 아니다. 이것은 -C 옵션을 명령어와 함께 사용할 때에도 마찬가지이다. 예를 들어 4개의 프로세서를 장착한 시스템 상에서 2개의 프로세서 집합이 있을 때 prstat -C를 한 프로세서 집합에서 실행시킬 경우, 프로세서 집합은 시스템 CPU의 50%만 가지고 있으므로 CPU 컬럼의 전체 점유율은 50%를 넘지 않을 것이다.



시스템 상에서 활성화된 작업이 시스템에서 가용한 물리적 메모리의 양보다 많은 메모리 자원을 요구할 경우, 시스템은 프로그램의 활성화 섹션을 위해 가용한 메모리를 만들어주려고 디스크에 페이징을 요청하게 된다. 이것을 페이징이라고 한다. 시스템이 페이징을 시작하면, 시스템 성능은 현저하게 떨어진다. 시스템이 페이징되고 있는지 여부를 판단할 수 있는 좋은 툴로서는 sar가 있다. sar -g 명령어는 주어진 시스템에서의 페이징 통계를 보여준다.

시스템이 페이징을 하는 가장 일반적인 원인에는 시스템 메모리의 대부분을 이용하는 프로세스나 프로세스 그룹이 있다. prstat는 어떤 프로세스가 시스템 메모리의 대부분을 사용하고 있는지를 알아내는 아주 좋은 툴이다. 앞서 말한 명령어와 비슷하게 prstat -s size라는 명령어를 이용하면 CPU의 사용량이 아닌 크기별로 prstat의 결과값이 나열된다.

다음 결과값은 매우 높은 페이징을 하고 있는 시스템에 대해 sar -g 명령을 내렸을 때이다.

sar -g 5 5
SunOS tartan 5.8 Generic_108528-01 sun4u 02/12/01
13:20:37 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
13:20:42 39.92 538.72 670.26 1147.31 0.00
13:20:47 36.60 483.80 515.40 353.80 0.00
13:20:52 40.20 508.20 632.00 1125.20 0.00
13:20:57 35.80 462.60 580.40 1141.60 0.00
13:21:02 0.00 0.00 0.00 0.00 0.00
Average 30.51 398.72 479.69 753.74 0.00

일단 시스템 성능 저하의 주범이 과도한 페이징 작업의 결과라고 판단을 내렸으면, 다음으로는 어떤 프로세스가 원인인가를 밝혀야 한다. 또한 스캐닝이 수시로 발생한다면(앞의 결과값에서 pgscan/s 컬럼에 나온 수치) 시스템의 메모리가 부족한 것이다. 페이징의 원인을 모두 밝혀내기란 쉽지 않지만 대부분의 가상 메모리를 사용하고 있는 프로세스를 먼저 알아내는 것이 좋은 방법이 된다. 가상 메모리 대부분을 사용중인 프로세스를 보려면 prstat 명령어에 -s size 옵션을 사용하면 된다. prstat -s size -n 5라고 명령하면 가상 메모리를 사용하는 시스템 내의 5개 상위 프로세스가 나타난다. 앞서의 sar 명령어를 수행한 시스템에 다시 prstat -s size -n 5라는 명령을 내린 것이 다음 예이다.

tartan% prstat -s size -n 5

PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
21307 kincaid 1001M 616M run 2 0 0:01.16 32% memhog/1
16472 root 138M 43M sleep 59 0 0:17.28 1.2% Xsun/1
1813 kincaid 92M 31M sleep 49 0 0:01.42 0.0% soffice.bin/9
16574 kincaid 44M 24M sleep 49 0 0:10.37 0.2% .netscape.bin/1
16674 kincaid 36M 25M sleep 49 0 0:00.08 0.0% sdtperfmeter/1

Total: 130 processes, 220 lwps, load averages: 0.51, 0.36, 0.23

위의 예에서 보면 한 개의 프로세스가 가상 메모리를 1,000MB 이상 사용하고 있다. 이 시스템은 물리적 메모리가 총 1GB밖에 되지 않는다. ID 21307인 memhog라는 프로세스가 시스템의 성능 저하를 가져온 프로세스로 보인다. 시스템의 해당 프로세스를 종료시키는 kill -9 21307 명령을 주면, 성능은 다시 정상으로 돌아오며 sar 명령어를 다시 수행하면 모든 페이징 및 스캐닝이 멈췄음을 다음과 같이 확인할 수 있다.

tartan% sar -g 5 5

SunOS tartan 5.8 Generic_108528-01 sun4u 02/12/01

13:20:02 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
13:20:07 0.00 0.00 0.00 0.00 0.00
13:20:12 0.00 0.00 0.00 0.00 0.00
13:20:17 0.00 0.00 0.00 0.00 0.00
13:20:22 0.00 0.00 0.00 0.00 0.00
13:20:27 0.00 0.00 3.80 590.60 0.00
Average 0.00 0.00 0.76 118.07 0.00



앞서에서는 시스템 성능에 영향을 주는 프로세스를 알아내는 데 사용되는 prstat의 사용법을 알아보았다. 이번에는 prstat를 이용해 개별 프로세스를 세부적으로 알아보는 방법을 살펴본다. 이번에 소개하는 기술은 서버 애플리케이션을 개발하거나 수행할 때 자주 직면하게 되는 특정한 형태의 버그나 문제들을 디버깅하는 데 유용한 것들이다.

prstat는 프로세스에 대한 새로운 통계치를 화면에 주기적으로 갱신해준다. 특정 프로세스에 대한 집중적인 사항을 알아보는 데에는 두 개의 명령어 옵션이 있으며, 이를 이용해 장시간동안 프로세스를 감시할 수 있다.



prstat를 이용해 특정 프로세스나 프로세스 집합에 대한 한정된 통계치를 얻으려면 -p 옵션을 이용하면 해당 프로세스 ID에 대한 결과값이 나온다. 프로세스 ID는 ps -ef 명령어를 이용해 얻을 수 있다. 성능에 영향을 미칠 것이라고 의심이 되는, 실행중인 프로세스의 정보를 수집하는 데에는 아주 유용한 방법이다.



기본적으로 prstat는 모니터링중인 프로세스에 대한 새로운 통계치를 리포트할 때마다 터미널 스크린을 업데이트해준다. 그러나 만일 프로세서가 자원 누수를 나타내는지 혹은 프로세서 성격이 어떠한지를 파악해야 할 때에는 비교를 위해 prstat 결과값에 대한 여러 개의 데이터 집합군을 갖는 편이 유용하다. 만일 사용자가 prstat의 출력을 파일로 리다이렉션한다면 prstat가 생성해내는 통계치는 파일로 보존된다.

by 무난하게 | 2005/02/27 00:44 | Technical.Doc | 트랙백(1)

트랙백 주소 : http://munhwan.egloos.com/tb/1006810
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from RevoLutioNis.. at 2008/07/30 11:38

제목 : [SOLARIS]prstat command
[LINK] http://munhwan.egloos.com/1006810 http://munhwan.egloos.com/1006801 NAME prstat - report active process statistics SYNOPSIS prstat [-acJLmRtTv] [-C psrsetlist] [-j projlist] [-k task- list] [-n ntop[,nbottom]] [-p pidlist] [-P cpulist] [-s key......more

※ 로그인 사용자만 덧글을 남길 수 있습니다.

◀ 이전 페이지          다음 페이지 ▶