메뉴 건너뛰기

XEDITION

UNIX

AIX에서의 병목 분석 방법에 대해 간략하게 소개해 드리겠습니다.
병목 분석은 성능을 잘 나오게 하기 전에 현재 시스템의 어디가 문제인지를 확인하는 과정입니다.
먼저 컴퓨터 시스템에서의 성능이 무엇인지 알아보겠습니다.


컴퓨터 시스템에서의 성능은 자동자의 성능과는 차이가 있습니다. 얼마나 빨리 사용자의 요청에 응답하느냐 또는 시스템이 얼마나 많은 일을 하느냐로 이 시스템이 좋다 또는 나쁘다라고 말합니다. 간혹 성능에 시스템 외적인 부분인 네트워크나 다른 컴퓨터 시스템과 같은 환경이 영향을 주기도 합니다.


시스템이 얼마나 많은 일을 하느냐(throughput)은 분당 DB의 트랜잭션수나 초당 파일 전송 속도, 분당 웹 서버의 히트 수와 같이 일정 시간 동안 할 수 있는 일의 처리량입니다.


사용자의 요청에 얼마나 빨리 응답하느냐(response time)는 요청이 왔을 때부터 결과가 산출될 때까지 소요되는 시간입니다.
예를 들면 DB를 쿼리하느데 걸리는 시간이나 터미널에 문자를 찍을 때 걸리는 시간, 웹 페이지에 접속하는 데 걸리는 시간입니다.

이 throughput과 response time은 상호 연관이 있으며, 관리자는 throughput을 줄여서 response time을 빠르게 자원을 배분 하거나 그 반대의 일을 하기도 합니다.
전반적으로 사용자가 기계보다 더 빨리 화를 내게 되므로 response time에 더 많은 비중을 두게 됩니다.


CPU ---> Memory ---> Disk ---> Network


여기서는 위의 성능 분석의 관찰 순서중 시스템의 CPU 사용량을 확인하는 방법까지 알아보겠습니다.

CPU는 한번에 하나의 Thread를 처리합니다. 이 쓰레드는 하나 이상이 모여 프로세스(작업 지시)를 이루게 되고, 프로세스는 쉘이나 명령어를 통해 사용자가 실행되게 됩니다.
애석하게도 하나의 물리적인 프로세서는 한번에 하나의 쓰레드를 실행하게 됩니다. 그러니 다른 쓰레드는 실행을 위한 순서를 기다려야 합니다.
이 기다리는 장소가 큐(Queue) 이며, 이 큐에 많은 수의 쓰레드가 실행을 기다리고 있다면 CPU의 병목이라고 판단하게 됩니다.

#vmstat 명령으로 간편하게 현재 시스템내의 큐의 상태를 확인할 수 있습니다.

 

이 그림에서 보면 현재 시스템에서의 run queue는 1개 이하의 적은 쓰레드가 실행되고 있다는 것을 확인할 수 있습니다.
r에서 CPU 갯수를 나누면 1개의 CPU당 실행중인(또는 실행 대기중인) 큐내의 쓰레드 수를 확인할 수 있습니다.
1개 이상이면 어떤 쓰레드는 앞의 쓰레드가 끝날 때 까지 기다려야 합니다.
b는 대기행렬에서 자원 취득이나 I/O를 기다리고 있는 쓰레드입니다. 만약 제일 낮은 우선순위를 가지고 있는 쓰레드가 있고 시스템의 자원에 계속 접근하는 새로운 쓰레드가 있다면 낮은 쓰레드는 계속 b에서 기다려야 할 것입니다.

이론적으로는 kthr 부분의 r의 숫자가 CPU의 갯수보다 높다면 CPU 병목의 기미가 보인다고 합니다. 하지만 이론과 실무는 항상 어느 정도의 괴리가 있는 법이어서, 실무에서는 “r/CPU 갯수”의 비율이 5 이상이 된다면 CPU 병목이다라고 판단합니다.
그리고 cpu의 id (idle time)이 지속적으로 10%이하라면 역시 병목이라고 판단합니다.

cs 항목은 context switch 로써, CPU를 점유하고 있던 쓰레드가 우선순위 등에 밀려 다른 쓰레드에게 CPU를 빼앗긴 횟수입니다. 이럴 경우는 여러 가지 원인에 의해 발생할 수 있는데 가장 많은 이유는 기존의 쓰레드가 자신에게 할당된 CPU 점유 시간(10ms)을 다 소진했거나, IO의 소유권을 가질때를 기다리기 위해 sleep상태로 들어간 경우 또는 더 높은 우선 순위의 쓰레드가 와서 자리를 양보한 경우가 이에 해당됩니다.

 

 

time 명령은 다음 명령이 걸리는 시간을 확인해 줍니다. /usr에 있는 모든 파일의 이름을 찾아서 표시하고 그 값은 /dev/null에 저장하라고 했을 때의 시간을 user, system 그리고 최종 걸린 시간으로 확인합니다.
만약 다른 프로세스가 없다면 user+sys 시간인 4.73초가 걸렸겠지만, 다른 쓰레드에게 CPU를 내어주거나, IO를 기다리기 위해 [그림1]에서 설명드렸던 vmstat의 b 라는 대기행렬에서 자원이나 I/O가 한가해 지기를 기다리는 시간을 포함하여 실제로는 16.43초가 걸리게 됩니다.


각 쓰레드 및 프로세스에는 우선순위가 존재합니다. 이 것의 확인은 ps 명령을 이용하면 쉽게 확인할 수 있습니다.
#ps -el : 모든 프로세스의 우선 순위를 확인합니다.
#ps -elk : 커널 프로세스까지 포함된 모든 프로세스의 우선 순위를 확인합니다.
#ps -lp <PID> : 특정 프로세스의 우선 순위를 확인합니다.

 

위의 그림에서 PRI 는 priority이며 낮을 수록 다른 프로세스보다 빨리 실행되는 우선권이 주어집니다. NI는 nice 값으로
사용자가 해당 프로세스에게 더 높거나 낮은 우선권을 주고 싶을 때 사용합니다. 이 NI값과 nice값에 이전에 CPU를 점유한 과거가 있는 프로세스는 우선 순위가 더 빨리 떨어지게 되는 누진 계산법에 의해 PRI수치가 결정됩니다.
NI에서 --라고 나온 부분이 시스템이 사용하는 고정된 우선 순위를 가진 프로세스입니다.
CPU는 일이 없으면 wait이라는 프로세스가 느슨하게 돌면서 다른 쓰레드가 들어오기를 기다립니다. wait의 우선순위를 보시면 255인 것을 확인할 수 있으니 255보다 항상 높기 마련인 사용자의 쓰레드가 들어오면 wait 프로세스는 즉시 CPU를 양보하게 됩니다.

지금까지 CPU의 현재 시스템 상태까지 알아보았습니다.
  

번호 제목 글쓴이 날짜 조회 수
43 [UNIX/AIX] Download Java version on AIX file 김병수 2019.11.11 2
42 [UNIX/AIX] rsync install and config on AIX7.1 file 김병수 2019.11.07 3
41 [UNIX/AIX] filesystem의 jfs2log 파일 변경 김병수 2019.11.06 2
40 [UNIX/AIX] 0516-1972 varyonvg : The volume group is varied on in other node in concurrent mode; non-concurrent mode 김병수 2019.11.06 3
39 [UNIX/AIX] 0506-365 Cannot mount guarded filesystem 김병수 2019.11.06 2
38 [UNIX/AIX] UNITY 400 스토리지, AIX 7.1, EMC ODM 설치 김병수 2019.11.05 2
37 [UNIX/AIX] AIX 7.1에 naver 나눔고딕 설치 file 김병수 2019.10.08 7
36 [UNIX/AIX] 스토리지 마이그레이션 방안 김병수 2019.10.07 10
35 [UNIX/AIX] error 내용 중 Detail Data SIGNAL NUMBER 6 의미 김병수 2019.10.03 793
34 [UNIX/HP-UX] 간단한 명령어 김병수 2019.10.03 6
33 [UNIX/Solaris] 간단한 명령어 김병수 2019.10.03 6
32 [UNIX / HP-UX] HP-UX vPar Architecture and compared introduce 김병수 2019.10.03 8
31 [UNIX / HP-UX] vPars v6 CLI 김병수 2019.10.03 7
30 [OS / HP-UX] i2 Blade Memory organization 김병수 2019.10.03 10
29 [OS / HP-UX] sar 명령어 김병수 2019.10.03 6
28 [UNIX/HP-UX] swap 확인하기 김병수 2019.10.03 6
27 [OS / AIX] AIX Performance Tools file 김병수 2019.10.03 11
» [OS / AIX] 시스템 성능분석, CPU부분 file 김병수 2019.10.03 7
25 [OS / HP-UX] hp-ux system and network administration i h3064a 김병수 2019.10.03 6
24 [OS / HP-UX] Core Dump File 생성 file 김병수 2019.10.03 6
위로