본문 바로가기

개발/linux

시스템 체크

# 시스템 부하

[root@master ~]# uptime

 10:59:44  up 243 days, 21:23,  1 user,  load average: 1.03, 3.11, 4.14


평균 부하(load average)의 다음에 나오는 세 개의 숫자(1.03, 3.11, 4.14)는 시스템에서의 1분, 5분, 15분 동안의 평균 부하를 각각 나타낸다.

시스템의 평균 부하는 실행 가능한 상태 혹은 중단 불가능한 상태의 프로세스들의 평균 개수와 같다.

실행 가능한 프로세스는 현재 CPU를 사용하고 있거나 CPU 사용을 위해 대기 중인 상태이고, 중단 불가능한 프로세스는 I/O를 기다리고 있는 프로세스다.


단일 CPU 환경의 시스템에서 평균 부하 1의 의미는 한 개의 CPU가 끊임없이 일을 하고 있다는 뜻이다.


# top을 이용한 부하 문제 진단


> top 출력 정보

Cpu(s): 43.7%us, 56.0%sy,  0.2%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st


- us : user CPU time

 nice가 적용되지 않은 사용자 프로세스가 소비한 CPU 사용량을 시간의 비율로 나타냄(nice는 다른 프로세스에 우선순위를 적용하는 것)


- sy : system CPU time

 커널과 커널 프로세스의 CPU 사용량을 시간의 비율로 보여줌


- ni : nice CPU time

 nice를 적용한 프로세스가 있을 경우 해당 프로세스의 CPU 사용량을 시간의 비율로 보여줌


- id : CPU idle time

 이것은 CPU가 사용되지 않는 유휴 상태의 비율을 나타냄.

 느려진 시스템에서 이 수치가 높게 나타난다면 시스템이 느려진 원인이 CPU 부하 때문이 아니라는 뜻.


- wa : I/O wait

  CPU사 I/O를 기다리면서 소비한 시간의 비율을 나타낸 것.

  이 수치는 느려진 시스템의 원인을 찾을 때 특히 중요.

  이 값이 낮으면 원인을 찾을 때 디스크 혹은 네트워크 I/O를 확실하게 배제할 수 있기 때문.


- hi : hardware interrupts

  하드웨어 인터럽트를 제공하는 데 CPU가 소비한 시간의 비율을 나타낸 수치.


- si : software interrupts

 소프트웨어 인터럽트를 제공하는 데 CPU가 소비한 시간의 비율을 나타낸 수치.


- st : steal time

 가상 머신을 실행 중일 경우 이 수치는 가상 머신을 위해 다른 task에서 사용된 CPU 사용량에 대한 시간의 비율을 나타낸 수치.


> top 프로세스 리스트에서 특정 프로세스를 종료하려면 'k' 키를 누른다.

'k'키를 누르면 15번 시그널을 보낼 수 있는 프롬프트가 나오고 여기에 PID를 입력하면 프로세스를 종료시킬 수 있다.


top Help Commands

Help for Interactive Commands - procps version 3.2.8

Window 1:Def: Cumulative mode Off.  System: Delay 3.0 secs; Secure mode Off.


  Z,B       Global: 'Z' change color mappings; 'B' disable/enable bold

  l,t,m     Toggle Summaries: 'l' load avg; 't' task/cpu stats; 'm' mem info

  1,I       Toggle SMP view: '1' single/separate states; 'I' Irix/Solaris mode


  f,o     . Fields/Columns: 'f' add or remove; 'o' change display order

  F or O  . Select sort field

  <,>     . Move sort field: '<' next col left; '>' next col right

  R,H     . Toggle: 'R' normal/reverse sort; 'H' show threads

  c,i,S   . Toggle: 'c' cmd name/line; 'i' idle tasks; 'S' cumulative time

  x,y     . Toggle highlights: 'x' sort field; 'y' running tasks

  z,b     . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')

  u       . Show specific user only

  n or #  . Set maximum tasks displayed


  k,r       Manipulate tasks: 'k' kill; 'r' renice

  d or s    Set update interval

  W         Write configuration file

  q         Quit

          ( commands shown with '.' require a visible task display window ) 

Press 'h' or '?' for help with Windows,

any other key to continue


top을 한 번만 실행해 전체 출력 결과를 보고자 할때

[root@master ~]# top -b -n 1

top - 11:12:00 up 59 min,  4 users,  load average: 0.02, 0.06, 0.15

Tasks: 212 total,   1 running, 211 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.6%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   3914396k total,   689696k used,  3224700k free,    29992k buffers

Swap:  4046840k total,        0k used,  4046840k free,   312528k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                

    1 root      20   0 19348 1560 1252 S  0.0  0.0   0:00.71 init                                                                   

    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                               

    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.02 migration/0                                                            

    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                            

    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                            

    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                             

    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1                                                            

    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1                                                            

    9 root      20   0     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/1                                                            

   10 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/1    

   

top 출력 정보를 파일로 저장

[root@master ~]# top -b -n 1 > top_output


top 출력 결과를 화면으로도 보고 파일로도 저장(tee 명령)

[root@master ~]# top -b -n 1 | tee top_output_tee


# 느려진 시스템 확인 사항


1) 느려진 시스템을 진단할 때 가장 먼저 확인해야 할 수치 중 하나는 I/O 대기 값이다.

이 수치를 통해 I/O를 문제의 원인에서 배제할 수도 있다.

I/O 대기가 높다면 그다음 단계는 무엇이 높은 디스크 I/O를 유발하는지 진단하는 것이다.


2) I/O 대기와 유휴 시간이 모두 낮다면 다음으로 높은 사용자 CPU 사용률을 살펴볼 것이고, 무엇이 높은 사용자 CPU 사용률을 야기하는지 확인해야 한다.

I/O 대기 시간은 낮고 유휴 시간값은 높다면 시스템이 느려진 원인은 CPU 자원 때문에 발생한 것이 아니므로 문제 해결을 다른 곳에서 시작해야 한다.


높은 입출력 대기 문제 진단

높은 I/O 대기 증상을 보았다면 가장 먼저 확인해봐야 하는 것은 시스템이 대량의 스왑을 사용하고 있는가다.

하드디스크가 RAM보다 훨씬 더 느리기 때문에 시스템에서 RAM이 고갈되고 스왑을 사용하게 되면 거의 모든 시스템은 성능 문제로 고생할 수밖에 없다.

디스크에 접근하려는 것들은 모두 디스크 I/O를 위해 스왑과 경합을 하게 된다(그래서 먼저 메모리가 모두 고갈됐는지 진단하고, 그렇다면 그 부분에서 문제를 처리하면 된다).

RAM 용량이 충분하다면 어느 프로그램에서 대부분의 I/O를 사용하고 있는지 밝혀낼 필요가 있다.


시스템이 과도한 I/O 부하에 걸려있다면 맨 먼저 진행해야 할 단계는 각 파티션을 살펴보고 어느 파티션에서 과도한 I/O 부하가 발생하는지 확인하는 것이다.

일단 과도한 I/O 부하가 발생한 곳을 알아냈다면 그다음 단계로 대부분의 I/O가 읽기인지 쓰기인지 확인할 필요가 있다.


iostat 출력 정보

[smu2]ns2:/home/oracle>iostat

Linux 2.6.18-128.el5PAE (ns2)   2013년 09월 02일


avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           2.78    0.00    1.62   10.63    0.00   84.96


Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

hda              45.46       623.87      1793.24    2129614    6121356

hda1              0.03         0.57         0.00       1960          4

hda2              0.06         1.21         0.19       4128        656

hda3              2.05        97.11         8.80     331498      30048

hda4              0.00         0.00         0.00          8          0

hda5              1.22         1.61        13.85       5493      47264

hda6              0.13         0.99         0.95       3370       3240

hda7              0.01         0.43         0.00       1459          0

hda8             41.95       521.77      1769.45    1781114    6040144


- tps

 장치에 대한 초당 전송량을 나타냄.

 "전송"은 장치에 보내는 I/O 요청을 다르게 표현한 것


- Blk_read/s

 장치에서 초당 읽혀지는 블럭의 수


- Blk_wrtn/s

 장치에 초당 쓰여지는 블럭의 수


- Blk_read

 장치에서 읽어들인 전체 블럭의 수

 

- Blk_wrtn

 장치에 쓰여진 전체 블럭의 수


iotop 사용

iotop은 시스템에서 실행되고 있는 모든 프로세스를 I/O 통계를 기준으로 정렬해서 보여준다는 점에서 top과 iostat를 조합한 것이다.

iostat는 리눅스 커널의 일부 새로운 기능을 사용하고 있으며, 커널 2.6.20 이상을 필요로 한다.

iostat가 기본으로 설치돼 있지 않다면 iotop이라는 패키지에서 찾을 수 있을 것이다.


[root@master ~]# iotop


 1462 be/4 root        0.00 B/s   35.38 K/s  0.00 %  0.00 % [flush-253:0]  

Total DISK READ: 0.00 B/s | Total DISK WRITE: 7.85 K/s 

  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                    

    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init

    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]

    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]

    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]

    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]

    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]

    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]


sar 사용 통계 정보

 - sar는 기본적으로 당일의 CPU 통계를 보여줌


[root@master ~]# sar | more

Linux 2.6.18-128.el5PAE (ns2)   2013년 09월 02일


`                CPU     %user     %nice   %system   %iowait    %steal     %idle

`                all     43.97      0.00     56.03      0.00      0.00      0.00

`                all     43.93      0.00     56.07      0.00      0.00      0.00

`                all     43.96      0.00     56.04      0.00      0.00      0.00

`                all     43.92      0.13     55.94      0.00      0.00      0.00

`                all     43.98      0.00     56.02      0.00      0.00      0.00

`                all     43.95      0.00     56.05      0.00      0.00      0.00


RAM 통계 정보 보기

[root@master ~]# sar -r | more

Linux 2.6.18-128.el5PAE (ns2)   2013년 09월 02일


`          kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad

`             109488   4040944     97.36    425180   1291628   3970036    126496      3.09       160

`             109240   4041192     97.37    425180   1291940   3970036    126496      3.09       160

`             108992   4041440     97.37    425180   1292252   3970036    126496      3.09       160

`             108124   4042308     97.39    425180   1292580   3970036    126496      3.09       160

`             108000   4042432     97.40    425180   1292888   3970036    126496      3.09       160

`             107752   4042680     97.40    425180   1293196   3970036    126496      3.09       160

`             107628   4042804     97.41    425180   1293520   3970036    126496      3.09       160


디스크 통계

[root@master ~]# sar -b | more

Linux 2.6.18-128.el5PAE (ns2)   2013년 09월 02일


`                tps      rtps      wtps   bread/s   bwrtn/s

`               2.86      0.00      2.86      0.00     41.03

`               2.80      0.00      2.80      0.00     39.89

`               2.77      0.00      2.77      0.00     39.75

`               4.35      0.00      4.35      0.00    136.21

`               2.84      0.00      2.84      0.00     40.20

`               2.77      0.00      2.77      0.00     39.27


초당 총 트랜잭션 수(tps)를 알 수 있고 추가적으로 얼마나 많은 읽기 트랜잭션(rtps)과 쓰기 트랜잭션(wtps)이 각각 있었는지 확인할 수 있다.

bread/s 칼럼은 bread I/O를 측정하지 않는다.

대신 초당 읽은 평균 바이트 수를 보여준다. 이와 비슷하게 bwrtn/s 역시 초당 평균 바이트 수를 보여준다.


과거의 통계 정보

특정 시간 범위에 대한 데이터를 가져오려면 -s와 -e 인자를 사용해 관심 있는 시간대의 시작 시간과 종료 시간을 각각 명시할 수 있다.


[root@master ~]# sar -s 14:00:00 -e 16:00:00 | more

Linux 2.6.18-128.el5PAE (ns2)   2013년 09월 02일


`                CPU     %user     %nice   %system   %iowait    %steal     %idle

`                all      1.34      0.00      1.23      5.39      0.00     92.05

`                all      2.60      0.00      2.80     19.07      0.00     75.52

`                all      0.93      0.00      0.91      4.00      0.00     94.16

`                all      0.98      0.01      0.90      4.32      0.00     93.79

`                all      0.96      0.00      0.89      4.15      0.00     94.00

`                all      0.89      0.00      0.87      3.82      0.00     94.42

`                all      0.93      0.00      0.89      4.19      0.00     93.99

`                all      0.89      0.00      0.92      3.96      0.00     94.24

Average:          all      1.18      0.00      1.17      6.04      0.00     91.61


'개발 > linux' 카테고리의 다른 글

centos7 네트워크 구성  (0) 2017.01.02
centos7 firewalld  (0) 2017.01.02
linux 터미널 한글 설정  (0) 2014.12.08
ssh 클라이언트 설치  (0) 2014.12.08
파이어폭스 flashplayer so 추가  (0) 2014.10.07