Operating System/Solaris2007/08/01 20:11

15장. System Tuning

∴ System이나 Network에 너무 많은 부하가 걸리지 않도록 한다. 부하가 많이 걸리게 되면 자원을 기다리는 Process들이 많아지게 되고 그러면 점점 누적되어 System의 성능이 급격히 저하되기 때문이다.

∴ 불필요한 기능이나 쓸모 없는 일을 위해 System 여분의 성능을 낭비하지 않는다. 예를 들면 System의 쿼터(용량제한)나 CPU 사용계산(Accounting) 등이 별로 필요 없는 경우 이에 대한 System의 불필요한 사용은 System의 성능저하의 한 몫만을 할 뿐이다.

추가적으로 고려할 사항은 Program을 만들 때는 System 성능을 고려한 Program의 작성이 요구되며 필요한 System 작업이 요구되는 경우 부하가 적은 야간을 이용해 cron을 돌려놓으면 좋다.

15.1 성능 향상을 위한 일반론

다음은 System의 성능을 향상시키기 위해서 필요한 것들이다. 이것은 Unix System뿐만 아니라 다른 운영체계의 System에도 해당되는 것이다.

1) System이 충분한 Memory 크기를 가지도록 하자. 일반적으로 운영체계에서 요구하는 기본 Memory 양이 있다. 이를 충분히 수용할 수 있어야만 그 System은 기대되는 성능을 낼 수 있는 것이다.

2) Program의 잘못된 사용을 바로잡는다. 앞서도 언급하였지만 System의 성능을 고려하지 않고 Program을 짜서 수행시키는 경우나 한꺼번에 많은 Program들을 불필요하게 수행시키는 등의 일은 System의 성능을 떨어뜨리는 결과를 초래한다. 또한 불필요한 Daemon의 수행도 마찬가지의 결과를 가져오는 것이다.

3) System의 Hard Disk나 File System을 정리한다. 이는 File System의 여러 가지 Option을 조정하는 것과 쓸모 없는 Directory나 File의 정리도 포함한다.

4) 항상 Network 상태를 Monitoring 한다. 특히 Error 율이 낮은지를 netstat 명령을 통해 Check한다.

5) Kernel 재조정을 통해 필요 없는 Driver와 Option 등을 제거한다. 예를 들면 자신의 System에 정착되어 있는 Hardware를 제외한 다른 회사의 Driver들은 제거해도 아무 지장이 없다. 다만 만일의 경우를 고려해 기존의 Driver들이 모두 있는 Kernel의 Backup은 받은 후에 제거한다.

15.2 System 성능에 영향을 주는 요소들

System 성능에 영향을 주는 요소들은 다양하게 존재한다. 이 요소들은 여러 가지로 파악될 수 있지만 그 중에서도 System의 Program들이 사용하는 Resource의 측면에서 파악하는 것이 일반적이다. System의 성능에 영향을 주는 요소들을 Resource 측면에서 파악하면 다음과 같다.

∙ cpu 사용 시간
∙ Memory
∙ Hard Disk I/O 양
∙ Network I/O 양

모든 Process는 System Resource의 일부를 사용한다. 이러한 Resource들을 여유 있게 Process들이 사용한다면 System의 성능은 양호한 것이다. 하지만 그렇지 않고 Resource가 없어 Process들이 기다리는 경우가 늘어날수록 그 System의 성능은 감소되는 것이다. Process들이 기다리는 시간을 System 성능의 척도로 사용하는 경우도 이러한 이유 때문이다. Resource 측정에 대하여 이제부터 설명하도록 하겠다. 참고로 Memory에 대해서 간단히 설명하자면 Unix System에서는 가상 Memory를 사용한다. 요즘은 다른 운영체계에서도 기본으로 되었지만 이것이 모두 Unix의 가상 Memory 개념을 가져다 변형한 것으로 보아도 무방하다. 이러한 가상 Memory는 실제 Memory의 부족을 Hard Disk를 통해 보완하는 개념이다. 사용하지 않는 Hard Disk 저장 공간을 Memory처럼 사용하는 것이다. 여기에는 한계가 발생하게 된다. 만약 System에서 사용하려는 Memory 공간이 실제 Memory에 있지 않고 Hard Disk에 있는 경우 Hard Disk의 내용을 읽어 Memory로 적재하고 기존의 Memory 공간은 Hard Disk로 옮기는 것이 필수적이다. 이 과정을 Paging이라 한다. Paging이 일어나는 Memory Block을 일반적으로 Page라고 한다. Page는 보통 4K 이상으로 구성되며 이는 일반적인 Disk 입출력 단위인 Disk Block(1K 혹은 512byte)이 여러 개 모인 것이다. Hard Disk에 있던 Memory Page가 Memory로 적재되는 것을 Page 인(Page In)이라 하고 Memory에 적재되어 있던 것을 Page 아웃(Page Out)이라 한다. 이 Paging의 과정이 많이 일어날수록 System의 성능은 감소한다. Hard Disk의 접근 속도가 Memory의 접근 속도에 비해 떨어지는 것은 당연하기 때문이다. 같은 System 환경에서 Paging을 줄이기 위한 노력도 많이 이루어졌는데 그 중의 하나가 지역성(Iocality)과 캐시이다. 캐시나 지역성 모두 가능하면 Paging을 줄이도록 Paging이 가장 적게 일어날 확률을 가진 Page들을 Memory에 유지하는 것을 목표로 한다. 가상 Memory에 대한 자세한 내용은 전산학의 운영체계에 관련된 도서를 참고하기 바란다.

15.3 Program의 시간 Check하기

Program의 시간을 측정해야 하는 경우가 발생한다. 이러한 경우 '/bin/time'명령어를 사용한다. 주의할 점은 C Shell에 내장되어 있는 time 명령과는 다르다는 점이다. 그러므로 사용할 때는 Directory도 함께 명시한다. 다음은 그 사용 예이다.

% /bin/time vmstat

procs    memory      page         disk     faults    cpu

r b w avm  fre  re  at  pi  po  fr  de  sr  d0  d1  d2  d3  in  sy  cs  us  sy  id

1 0 0   0  7584   0   3  0   0  0    0  0   1   0   0   0  14   4   2   0   0   99

      0.6 real           0.5 user            0.1 sys

위에서 보면 전체 0.6초가 걸렸고 그 중 0.5초는 사용자 Code이며 0.1초가 System 호출 등의 Kernel 관련 경과 시간을 나타낸다. 자신이 만든 Program이 얼마나 System Call 등의 Kernel관련 작업을 수행하는지 파악하고자 할 때 매우 유용한 명령인 것이다.

15.4 System의 성능 측정하기

위에서 성능을 측정하는 데는 일반적으로 ATT 계열이 BSD 계열보다 Monitoring 도구가 좋은 평가를 받는다. 실제로 ATT 계열은 sar 명령어를 이용하면 모든 요소를 측정할 수 있지만 BSD System의 경우는 각 요소마다 다른 명령어를 사용해야 하므로 일단 ATT 계열의 사용이 편리(?)하다는 생각이 든다.

15.5 현재 CPU 성능 측정

CPU 의 성능을 측정하기 위해서는 다음의 3가지를 Check해야 한다.

∙ 전체 사용 정도
∙ 평균 부하
∙ Process별 CPU 사용 정도

이러한 모든 정보는 ATT 계열의 경우는 'sar -u' 명령을 사용하여 알아내며 BSD 계열의 경우는 vmstat 명령을 이용한다. 하지만 필자가 여러 System을 Test해 본 결과 많은 ATT계열의 System들이 vmstat 명령을 지원하는 것으로 나타났다. 독자들은 어찌되었건 두 가지 명령어 모두 알아두도록 하자. 두 명령어 모두 2개의 인자를 가지는데 하나는 '측정 시간 간격'이고 다른 하나는 '통계를 낼 횟수' 즉 몇 번 측정하고 통계 기록을 보여줄지를 지정하는 것이다.

다음은 ATT계열의 사용 예이다.

% sar -u 5 5

23:12:30      %usr    %sys    %wio      %idle
23:12:35        4        58       27        11
23:12:45        7        83        9         0
23:12:50        6        76        6         0
23:12:55        4        73        8         0
23:12:00        4        85        4         0

'%usr'는 사용자 Code를 수행하는데 사용되는 CPU 시간의 백분율이며 '%sys'는 System Kernel의 Code를 수행하는데 사용되는 CPU 시간의 백분율이다. 그리고 '%wio'와 '%idle'은 CPU의 Idle 시간을 나타내는 백분율인데 원인이 Disk I/O 때문이면 '%wio'에 나타나고 그 이외의 이유라면 '%idle'에 속하게 된다. 위의 System의 경우 많은 부분을 Kernel이 사용하고 있는데 이는 어찌 보면 당연한 결과이다. 우리가 주목해야 할 부분은 Idle 비율로 위의 경우는 CPU가 Resource를 기다리는 시간이 얼마 안되므로 System에는 큰 부하 없이 잘 돌아감을 의미한다.

 'vmstat' 명령도 여러 정보를 제공해 주는데 다음은 그 사용 예이다.

% vmstat 5 5

procs                  page                 faults          cpu

r b w   re  mf  pi  po fr  de  sr  in   sy  cs  us  sy  id

0 0 0    0   0   0   0  0   0   0   4   22  19   2   1  97
1 0 0    67  2   0   0  0   0   0  26  751  52  53  47   0
0 0 0    96  0   0   0  0   0   0  39 1330  42  22  71   7
0 0 0    16  0   0   0  0   0   0  84 1626  99   7  74  19
0 0 0     1  0   0   0  0   0   0  11  216  20   1  11  88

'sar-u' 명령에 나왔던 항목들이 여기서는 cpu Field의 us, sy, id 열에 나타난다. 위 System의 경우는 System의 Idle time 이 부분적으로 높게 나타나므로 현재 부하가 어느 정도 걸리고 있음을 알 수 있다. 수치가 일정치 않음은 여러 요인에 의한 것이므로 좀 더 오랫동안 Monitoring 하여 확인해야 할 것이다. 다음 표는 두 명령에서의 항목을 나타내었다.

sar명령
(u Option)

vmstat명령
(cpu 항목)

설 명

%usr

us

사용자 Code를 수행하는 cpu 시간에 대한 백분율

%sys

sy

System Kernel Code를 수행하는 cpu 시간에 대한 백분율

%wio

id

Disk I/O에 의해 CPU가 기다리는 시간(idle time)에 대한 백분율

%idle

 

Disk I/O 이외의 이유로 인해 CPU가   기다리는 시간에 대한 백분율

   * 참조: "vmstat -S"를 사용 check시 CPU의 idle time이 50%선이면 안정

부가적으로 fault Field의 in은 초당 Device Interrupt 횟수, sy 항목은 초당 System Call의 횟수를 나타내며 cs 항목은 일정 시간 동안(보통 초당)의 context switching, 즉 Process의 제어권의 변경 횟수를 나타낸다. 다른 항목은 조금 후에 알아보도록 하겠다.

vmstat명령
(fault 항목)

설 명

in

초당 Device Interrupt 횟수

sy

초당 System Call 수

cs

초당 Context Switching 횟수

참고로 Solaris의 경우는 위의 sar와 vmstat 명령을 모두 제공한다.

사실, CPU의 상태는 순간순간 급격히 변하기 때문에 짧은 시간 동안의 Monitoring은 그다지 정확한 정보를 나타내지는 않는다. 그러므로 되도록 오랜 시간 동안 Monitoring을 하여야 정확한 정보를 알 수 있다.

15.6 평균 부하(load average)

또 하나의 유용한 CPU 통계정보로 평균 부하가 있다. 일반적으로 평균 부하는 Disk나 I/O의 대기 시간도 포함하므로 순수한 CPU 사용에 대한 척도를 나타내는 것은 아니다. 하지만 CPU가 얼마나 골고루 사용되는지를 나타내는 좋은 척도임은 사실이다. 실제로 이 평균 부하 수치는 일정 시간 동안 수행 대기 큐에서 기다리는 작업의 수에 대한 평균을 내는 것이다.

평균 부하는 uptime 명령을 통해 얻을 수 있다.

% uptmie

- last 1분, 5분, 15분간의 system load average를 report
- System V의 sar -q와 유사

12:24am up 2 hrs, 1 user, load average: 1.34, 2.28, 2.51

- 15분간의 load average보다 1분간의 load average가 작은 것을 falling이라고 하며, 만약 system이 느리지만 load average가 falling이면 시간이 지남에 따라 problem이 해결되는지를 확인하는 것이 좋다

% uptime

2:07pm up 4:02, 5 users, load average: 0.95, 0.38, 0.31

위에서 보면 3가지 수치가 나오는데 이는 각각 5분, 10분, 15분의 평균을 나타낸 것이다. 이 System의 경우는 평균적으로 대기중인 작업이 1개가 채 안되므로 부하가 별로 없음을 의미한다. 이 수치가 5이상 되면 어느 정도 부하가 걸리고 있다고 생각하면 무방할 것이다. 하지만 이런 경우 Disk I/O 위주의 Program이 많아서 수치가 높게 나타나는 경우도 있으므로 vmstat나 sar 명령으로 다시 한번 확인해 보기 바란다.

15.7 Paging Algorithm

Unix System에서는 가상 Memory에 대한 Paging을 수행한다고 하였다. 이를 위해서는 System이 어떠한 Page를 교체, Swapping 할 것인가를 결정하여야 한다. 일반적으로 가장 최근에 사용하지 않은 Page를 선택해 교체하는 LRU(Least Recently Used) Algorithm이 좋은 것으로 알려져 있으나 사실 각 Page마다 참조 카운터(reference counter)를 유지하는 것은 많은 CPU System 자원이 소모된다. 그래서 Unix에서는 간단히 시계(clock) Algorithm을 사용한다.

Kernel은 Paging Out되는 Memory Page들을 가리키는 Free List를 유지한다. 그리고 Paging Out 될 Page에 대한 지정 순서는 어느 Memory Page나 동일하게 순차적으로 지정된다. 그래서 시계의 시침이 돌아가듯 순차적이란 의미에서 시계 Algorithm이라고 한 것이다. 하지만 Memory의 상태에 다라 시침이 돌아가는 속도는 변경된다는 점이 일반 시계와는 다른 점일 것이다.

15.8 Memory 사용 분석하기

Workstation의 경우 가장 좋은 Memory 분석 도구는 사람의 귀이다. 많은 Paging이 일어나는 경우 Hard Disk를 Swapping하는 소리를 직접 확인할 수 있다. Paging을 위한 Swap 공간의 확인은 BSD System의 경우는 'pstat-s' 명령, ATT의 경우 'swap-1' 명령을 이용한다. ATT의 경우 'sar-r' 명령도 사용할 수 있다. 사용 예는 다음과 같다.

pstat 명령의 경우는 Kbytes 단위로 나타내고 다른 명령들은 512bytes 단위이다.

% pstat -s

110224k allocated  +  13556k reserved = 123780k used, 163000k available

% swap -1

swapfile           dev   seapl   blocks  free

/dev/dsk/c0t0d0s1  32, 1,   16   164400 162960

% sar -r 5

17:58:52  freemem   freeswap
17:58:57       361    179616

HP-UX System의 경우 Swap 영역에 대한 정보를 얻기 위해 swapinfo 명령을 사용한다.

OSF/1 System의 경우 sar 명령은 Option으로 설치하기 때문에 대부분 없는 경우가 많다. 하지만 Swap 상태를 확인하기 위해서는 'swapon -s'명령을 사용하면 된다.

% swapon -s

Swap partition /dev/rz24b (default swap) :

    Allocated space:     98205 pages (767MB)
    In-use space:         6320 pages (  6%)
    Free space          91885 pages ( 93%)

Total swap allocation:

 Allocated space:     98205 pages (767MB)
 Reserved space:       9736 pages (  9%)
 In-use space:         6320 pages ( 6%)
 Available space:       88469 pages ( 90%)

다음, BSD System과 HP-UX 에서의 Paging 상태는 vmstat 명령을 사용하여 확인한다.

% vmstat 5 5

procs    memory               page                disk        faults       cpu

r b w  avm   fre  re at pi po fr de sr d0 d1 d2 d3 in sy cs us sy id

0 0 0     0  2300  0  3  0  0 0  0  0  1  0  0   0 14  4  2  0  0 99
0 0 0     0  2116  0  9 24  0 12 0 10  1  0  0   0 17 104  8  0  0 100
0 0 0     0  2064  0  2  0  0 0  0  2  0  0  0   0 10 39  3  0  0 100
0 0 0     0  2048  0  0  0  0 0  0  0  0  0  0   0  7 15  0  0  0 100
0 0 0     0  2048  0  0  0  0 0 16  0 13  1  0   0 33 13  8  1  1 98

procs 항목은 현재 수행을 기다리는 작업 수(r)와 I/O Block된 Process(b), 현재 Swapping 중인 Process(w) 수를 나타낸다. Swapping 중인 Process(w) 수를 나타낸다. Swapping 중인 Process의 수가 0이 아닌 경우 현재의 부하에 비해 Memory가 부족함을 의미한 것이다.

Memory 항목에서는 Memory의 상태를 보여주는데 최근 20초 안에 수행된 Process에 속하는 가상 Memory의 Kbytes 수(avm)와 여유 Memory Kbytes 량 (fre)을 확인할 수 있다.

Page 항목은 Paging 활동에 대한 경고를 제공한다. 모든 열은 초당 평균값을 나타내는데 그 의미는 다음과 같다.

Field

항목

의미

procs

r
b
w

현재 수행을 기다리는 작업 수
I/O Block된 Process 수
현재 Swapping 중인 Process 수

memory

avm

fre

최근 20초 안에 수행된 Process에 속하는 가상 Memory의 kbytes 수(avm)
Free List에 있는 Memory의 kbytes 수

page

re
at
pi
po
fr
de
sr

사용중인 Page 수
Free List에 있는 Page 수
Page In 된 kbyte
Page Out 된 kbyte
Free List에 있는 kbytes
Memory 부족이 예상되는 Page 수
clock Algorithm에 의해 Check된 Page 수

이 가운데 de 항목이 100을 넘어서면 Memory가 상당히 부족함을 의미한다. 하지만 불행히도 많은 System들이 이 항목을 보여주지 않는다. 'vmstat-S'와 같이 사용하면 Page의 In, Out 대신 Context Switch에 대한 항목을 보여준다. 다음과 같다.

% vmstat -s 5 5

procs memory                  page               disk         faults      cpu

r b w  avm   fre  re at pi po fr de sr d0 d1 d2 d3 in  sy cs us sy id

0 0 0     0  7608  61  0  0  0 0 16  0  1  0  0  0 14  4  2   0  0 99
0 0 0     0  7584  25  0  0  0 0  0  0  0  0  0  0 13 38  4   0  0 100
0 0 0     0  7520   0  0  0  0 0  0  0  0  0  0  0  4 15  0   0  0 100
0 0 0     0  7504   0  0  0  0 0  0  0  0  0  0  0  1  6  0   0  0 100
0 0 0     0  7504   0  0  0  0 0  0  0  0  0  0  0  5 11  3   0  0 100

Solaris의 경우는 'sar-g' Option을 통해 Page Out에 대한 정보를 확인하며 Page In에 대한 정보는 'sar-p'명령을 사용한다.

15.9 Disk I/O 분석하기

대부분의 System들은 iostat 명령을 통해 Disk I/O 양을 Monitoring 할 수 있다. vmstat 명령과 같이 시간간격과 요약 횟수를 인자로 지정한다.

사실 iostat 명령에 대한 출력 결과는 System에 따라 다소 차이를 보인다.

- provides a measure of the CPU's idle time
- System V의 sar -u 와 유사

% iostat 5 5

tty               wd0                   sd0               cpu

tin tout    sps  tps   msps     sps    tps  msps   us   ni  sy  id

2  129     2     0    0.5         3     0     20.3   0    0   0  99
1  252     0     0    0.0       614    40     16.9  27    0  14  59
1  321     0     0    0.0       511    45     16.7  17    0  12  71
0   15     0     0    0.0       419    27     19.9  11    0   8  80
1  191     0     0    0.0         3     0     25.0   0    0   0  99

하지만 일반적인 위의 출력 결과에 대해 설명하도록 하겠다. tty Field는 Terminal과 가상 Terminal에 대한 Data를 나타낸다. Mode Terminal의 문자 입출력에 대한 초당 횟수를 나타내는데 실제 System의 성능과는 별 연관이 없으며 특별한 목적에만 유용하다. 각 Hard Disk는 sps, tps, msps 항목을 가진다. 각각 초당 전송 섹터, 초당 전송 횟수, 탐색속도(밀리초)를 나타낸다. sps와 tps의 비는 한번에 얼마나 큰 Size의 Block이 전송되는지를 나타내게 된다. 이 경우 크면 클수록 성능 면에서는 효과적인 것이다.

항목

설명

tty

tin
tout

Terminal에서의 초당 문자 입력 횟수
Terminal에서의 초당 문자 출력 횟수

sd, wd

sps
tps
msps

초당 전송 섹터 수
초당 전송 횟수
탐색 속도(seek time: ms)

- us : user 상태에서 running하는 process들에 의해 사용된 CPU % ( default scheduling priority 이상)
- ni : user 상태에서 running하는 process들에 의해 사용된 CPU % (low scheduling priority)
- sy : system상태에서 사용된 CPU % (Executing System Calls, UNIX Kernel Code, Scheduling Overhead등)
- id : percentage of the system spent idle

SunOS 4.1의 경우 이 비율도 나타내도록 'iostat -D' Option을 줄 수 있다.

% iostat -D 5 5

rps   wps   util   rps   wps  util   rps  wps  util

0      0    1.3    0     0    0.3    0     0   0.5
9      8   41.1    1     0    1.8    1     0   2.4
11      4   48.4    0     1    2.0    0     0   0.0
8      0   15.6    0     0    0.0    0     0   0.0
0      0    0.0    0     0    0.0    0     0   0.0

iostat로 Disk 부하량 분석하는 방법.

# iostat -tDc 5

   tty            fd0             sd1             sd3            cpu

tin tout rps wps util rps wps util rps wps util us sy wt id

0   13   0   0   0.0  0   0  0.4  0   0   0.1  5  2  0  92
0   13   0   0   0.0  0   0  0.0  0   0   0.0  0  1  0  99

%로 나타내는 until Field는 더욱 유용하다. Device Driver는 Drive에 대하여 명령을 발행하고 응답까지 걸리는 시간 및 다음 명령까지의 Disk 유혹시간을 측정하여 사용률(%)을 산출하고 있다. 사용률이 100% Disk라는 것은 다음 명령이 발생될 때까지 유휴시간이 없는 Disk이다. 5초간에 최고 사용률 50%를 넘는 Disk는 성능에 문제가 발생하고 있다고 할 수 있다.

# iostat -txc 5

                               extended disk statistics       tty              cpu

disk   r/s  w/s  Kr/s  Kw/s wait actv svc_t %w %b tin tout us sy wt id

fd0    0.0  0.0  0.0   0.0  0.0  0.0  523.3  0  0  0   13   5  2  0  92
sd1    0.1  0.2  0.4   1.6  0.0  0.0  117.3  0  0  
sd3    0.0  0.0  0.1   0.4  0.0  0.0   37.6  0  0

                               extended disk statistics       tty              cpu

disk   r/s  w/s  Kr/s  Kw/s wait actv svc_t %w %b tin tout us sy wt id

fd0    0.0  0.0  0.0   0.0  0.0  0.0   0.0  0  0  0   73   1  1  0  98
sd1    0.0  0.0  0.0   0.0  0.0  0.0   0.0  0  0  
sd3    0.0  0.0  0.0   0.0  0.0  0.0   0.0  0  0

Disk의 과부하를 판별하는 방법 --> 주의해야 할 중요한 값은 서비스 시간(svc_t)임.

이것은 이 Drive에 대한 입, 출력 요구의 Service에 소요된 시간이다.

이 시간에는 다른 요구가 처리 중에 있기 때문에 Queue에서 대기하는 시간도 포함된다.

30초간의 평균 사용률이 30%를 넘는 Disk는 Service 시간을 점검할 필요가 있다.

15.10 File System Tuning하기

tunefs 명령어가 File System의 여러 Option을 조정하는데 사용된다는 것은 Disk 공간 관리에 대한 연재에서 설명하였다. 다시 부연 설명하자면 tunefs 명령어는 특정 File System의 전체적인 Parameter를 변경하는 일을 수행한다. 해당되는 Parameter는 다음과 같은 것들이 있다.

∙ File에서의 Block 그룹간의 rotational delay
∙ 하나의 입. 출력 동안 전송되는 최대 Block 수
∙ 하나의 Cylinder Group에서 사용 가능한 Block 수
∙ 만약을 위해 준비하는 Disk 용량

가끔은 이 명령을 이용한 Tuning이 상당한 성능 개선 효과를 가져오는 경우가 있다. 하지만 적절한 Option의 조절을 위해서는 여러 번의 시도가 이루어져야 하며 항상 성능 개선 효과를 가져다 주는 것도 아니므로 각 System들의 Manual을 참조하기 바란다.

15.11 pstat: 무작위 통계 출력하기(BSD)

BSD 계열에서 또 한 가지 유용한 명령어가 pstat 명령이다. 이 명령은 여러 가지 Kernel의 Table의 Data들을 사람이 읽기 쉬운 형태로 Dump 한다.

다음은 BSD System에서 사용하는 Display Option을 나타낸 것이다. 다른 System에서는 이보다 적은 Option을 가지는 것이 일반적이다.

Option

내 용

-i

inode Table의 Dump

-x

Context Swtich Table Table의 Dump

-P

Process Table의 Dump, ps 명령보다 자세하다.

-f

개방된 File Table의 Dump

-t

모든 Terminal에 대한 정보를 나타냄

-u

특정 Process에 대한 정보를 나타냄

-s

Swap 공간에 대한 정보를 나타냄

-T

Kernel Table이 얼마나 차 있는지를 나타냄

이 중에서 가장 유용한 것이 -T Option으로 Table의 사용 정보를 나타낸 것으로 사용하면 다음과 같은 결과를 출력할 것이다.

% pstat -T

121/364  files
85/158   inodes
34/74    processes
21/38    texts
70/169   00k swap

물론 '현재 사용 정도/전체 사용량'을 나타낸다. 이 Option은 Kernel을 재구축하는 경우 maxusers Option의 적절한 값을 지정하는데 도움을 준다.

15.12 System 성능 Check의 단계

System은 일시적으로 갑자기 느린 동작을 보이는 경우가 있다. 이러한 경우는 일반적으로 시간이 약간 경과하면 다시 원상태로 회복되지만 만약 이런 현상이 지속적으로 나타나면 다음과 같은 단계로 System을 Check해 보자.

1) ps 혹은 top 명령을 통해 zombie Process나 혹은 System 자원을 굉장히 많이 소비하는 Process가 없는지 확인한다. CPU 사용률 50% 이상 사용하는 Process를 처리하고 만약 이러한 Process가 없을 경우는 10% 미만의 Process가 여러 개(3개 이상) 있는지 검사한다. 검사는 uptime 명령을 사용해 평균 부하를 Check하고 CPU가 계속 대기 상태인지를 vmstat 나 'sar -u' 명령을 통해 확인한다.

2) CPU 사용 상태에 문제가 없는 경우는 얼마나 많은 가상 Memory의 교체(Paging)가 일어나는지 vmstat나 'sar -g' 명령을 통해 확인한다. 많은 수의 교체가 일어난다는 것은 Memory에 대한 경쟁이 치열함을 의미하는 것이다. 만약 Paging 없이 Disk 사용 정도가 높게 나타나면 이는 하나의 Process가 File 입. 출력을 하면서 Disk를 독점함을 의미하는 것이다. 이런 경우 그 Process를 찾는 것은 사실 뾰족한 방법이 없는데 일반적으로 Disk 사용이 많은 Process는 CPU 사용도 많다는 정도가 도움이 될 것이다.

3) 문제가 되는 Process를 찾았을 때 우선은 그 Process의 소유자에게 확인한 후 그 Process의 우선 순위를 낮게 조정한다거나 혹은 제거하는 방법을 사용해야 할 것이다. 물론 여기에는 사용자와의 인간적인 대화가 먼저 요구된다. 물론 불법적인 Process인 경우는 물어볼 필요 없이 제거하면 된다. 참고로 BSD System의 경우는 setrlimit() System Call을 이용한 limit 명령을 통해 물리적 Memory의 사용량을 제한 할 수 있다. 사용 예는 다음과 같다.

% limit memoyues 2m

위의 예는 2MByte로 Memory 사용량을 제한하는 것이다.

4) System 성능저하의 원인이 Process 때문이 아니라면 다른 이유로 인해 발생한 것으로 보면 되는데 첫 번째가 Network의 부하가 큰 경우이다. 두 번째가 서버-클라이언트 관련된 Program에 의한 연결지연이 그 원인인데 이는 Server가 다운된 경우 이를 접속하려는 Client가 계속 연결지연을 하는 것이 그 원인인 것이다. 이러한 문제들은 Network 상태를 Check해 파악한 후 해결한다.

15.13 Process 분석

% ps -au

 USER      PID %CPU %MEM  SZ RSS TT STAT START TIME COMMAND

 hjh       327 0.0 2.0 456 896 p0 R   10:31  0:00 ps -au
 hjh       306 0.0 0.8 152 336 p0 S   10:24  0:00 -csh (csh)

 - USER : The user who started the process
 - PID  : The process ID number assigned by the system
 - %CPU : The percentage of the CPU time used by this process
 - %MEM : The percentage of system's physical memory used by this process
 - SZ   : The amount of nonshered virtual memory, in KByte
 - RSS  : Real memory (resident set) size of the process (in kilobytes)
 - TT   : tty name
 - STAT : process's status

           . R : runnable
           . T : currently stopped
           . P : waiting for a page-in
           . D : waiting for disk I/O
          . S : sleeping for less than 20 seconds
           . I : idle (sleeping for more then 20 seconds)
           . Z : terminated but has not died

 - TIME : The total amount of CPU time that the program has consumed

Creative Commons License

'Operating System > Solaris' 카테고리의 다른 글

POWER ADMIN for SUN (System Backup 및 Device)  (0) 2007/08/06
POWER ADMIN for SUN (VI Editor)  (0) 2007/08/05
POWER ADMIN for SUN (Unix C-Shell Programming)  (0) 2007/08/04
POWER ADMIN for SUN (sed)  (0) 2007/08/03
POWER ADMIN for SUN (AWK)  (0) 2007/08/02
POWER ADMIN for SUN (System Tuning)  (0) 2007/08/01
POWER ADMIN for SUN (PPP)  (0) 2007/07/31
POWER ADMIN for SUN (FTP)  (0) 2007/07/30
POWER ADMIN for SUN (NFS)  (0) 2007/07/29
POWER ADMIN for SUN (DNS)  (0) 2007/07/28
POWER ADMIN for SUN (POP Server)  (0) 2007/07/27
Posted by BLUEDAY™