os/Linux

왜 서버가 이렇게 느리지? CPU, RAM 그리고 디스크 I/O의 자원고갈

C/H 2014. 10. 21. 08:30



데브옵스



uptime
 07:51:20 up 2 days, 18:01,  3 users,  load average: 2.35, 1.78, 1.64
load average: 5분, 10분, 15분 평균 부하
top -b -n 1 > top_output
# top을 한번만 실행해서 top_output로 보내기
top -b -n 1 | tee top_output
# top을 한번만 실행해서 화면에 출력하고 top_output로 보내기
top
top - 07:54:58 up 2 days, 18:04,  3 users,  load average: 1.11, 1.63, 1.62
Tasks: 335 total,   2 running, 323 sleeping,   0 stopped,  10 zombie
%Cpu(s):  7.7 us,  3.4 sy,  0.4 ni, 88.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  32864768 total, 22578036 used, 10286732 free,   111856 buffers
KiB Swap: 31232892 total,    70272 used, 31162620 free. 11007736 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
31714 username  20   0  673588 172460 102676 S  26.9  0.5 151:26.84 chrome
 1875 root      20   0  326872 150840  66900 S  18.9  0.5   1953:52 Xorg
 4245 username  20   0  814512 108020  40104 S  15.3  0.3   6:02.74 chrome
29427 username  20   0 7452512 711720 619504 S  14.3  2.2  60:51.75 VirtualBox
27833 username  20   0 4145932 1.167g 1.101g S  11.3  3.7 218:06.89 VirtualBox
 4029 username  20   0 2022540 782144  17252 S  10.0  2.4 414:39.53 gnome-system-mo
 9505 username  20   0 5472072 338576  21656 S   6.3  1.0 343:55.64 transmission-gt
32437 username  20   0   33112   2668   1372 S   3.3  0.0 118:58.95 htop
 1249 username  20   0 1175688  24356  15052 S   1.7  0.1   0:49.40 gnome-terminal
31670 username  20   0  991100 214912  90992 S   1.7  0.7  24:31.86 chrome
 3591 username  20   0  961216  27200  14284 S   0.7  0.1  31:39.39 xfwm4
 3781 username  20   0 1573548 190328  20516 S   0.7  0.6  25:48.17 docky
# 1번째 줄은 uptime과 동일
# 3번째 줄은 CPU가 현재 하고 있는 정보
	# us : user CPU time => nice가 적용되지 않은 사용자 프로세스가 소비한 CPU 사용량을 시간 비율로 나타낸다. (nice 는 우선순위가 적용된것 )
	# sy : system CPU time => 커널과 커널 프로세스의 CPU 사용량을 시간 비율로 보여준다.
	# ni : nice CPU time => nice를 적용한 프로세스가 있을 경우 해당 프로세스의 CPU사용량을 시간 비율로 보여준다.
	# id : CPU idle time => CPU가 사용되지 않는 유휴 상태의 비율. 이 수치를 늘여야 한다.
	# wa : I/O wait => CPU가 I/O를 기다리면서 소비한 시간의 비율을 나타낸다. 느려진 시스템을 찾을때 중요.
	# hi : hirdware interrupts => 하드웨어 인터럽트를 제공하는데 CPU가 소비한 시간의 비율을 나태낸 수치
	# st : steal time => 가상 머신을 실행중일 경우 이 수치는 가상 머신을 위해 다른 task에서 사용된 CPU사 사용량에 대한 시간 비율.
# 4번째 줄은 메모리 물리적으로 사용가능한 RAM의 크기가 얼마나 되는지, RAM이 얼마나 사용됐는지, 얼마나 여유가 남아있는지, 얼마나 버퍼로 사용되는지 보여준다.
# 5번째 줄은 swap영역의 사용량에 대해 해당 정보를 유사하게 보여주는데, 리눅스 파일 캐시를 위해 RAM이 얼마나 사용됐는지 함께 덧붙여 보여준다.
	# 리눅스는 파일을 RAM으로 불러오고 나면 해당 프로그램의 실행을 완료했더라도 반드시 RAM에서 제거하지는 않는다. 
	# 이용 가능한 RAM이 남아 있다면 리눅스는 해당 파일에 또 다시 접근할 때 훨씬 더 빨리 접근할 수 있게 RAM에 해당 파일을 캐시에 남겨둘 것이다. 
	# 얼마나 많은 양의 프로세스가 RAM을 사용하고 있는지 파악하려면 used-cached 계산한 값이 프로세스가 사용한 RAM의 용량이다.
# 각 프로세스에서 k(kill)키를 이용해서 프로세스를 중단하거나 죽일수 있다.
# m(momory)키를 사용하면 메모리 사용량에 따라 프로세스가 정렬된다. 기본은 CPU사용량으로 정렬된다.
sudo iostat
Linux 3.13.0-38-generic (hostname) 	2014년 10월 20일 	_x86_64_	(8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          10.91    2.67    4.00    0.42    0.00   81.99

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               9.61       137.00       161.69   32731740   38631656
sdb               9.01       136.41       157.94   32591906   37734892
sdc               8.50       136.18       157.62   32536592   37659420
sdd               8.44       136.07       157.96   32511483   37741148
sde               8.58       135.50       157.34   32375009   37591252
md1               0.00         0.01         0.00       1725         76
md2              26.10       391.27       537.03   93483316  128309038
md0               0.08         0.04         0.30       8528      71532
# tps : 장치에 대한 초당 전송량, "전송"은 장치에 보내는 I/O요청을 다르게 표현한 것이다.
# Blk_read/s : 장치에서 초당 읽혀지는 블럭의 수
# Blk_wrtn/s : 장치에 초당 쓰여지는 블럭의 수
# Blk_read : 장치에서 읽어들인 전체 블럭의 수
# Blk_wrtn : 장체에 쓰여진 전체 블럭의 수
# 어느 파티션에 과도한 I/O가 발생하는지 확인한다.
# sudo iostat 2 : 2초마다 iostat 실행
# iostat가 설치 되어 있지 않다면 sudo apt-get install sysstat 로 설치한다.
sudo iotop
# I/O에 대해서 top 과 동일한 기능을 하는 패키지
# sysstat 설정하기
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get insatll sysstat
sudo vi /etc/default/sysstat
# sudo vi /etc/sysconfig/sysstat
# ENABLED="false"
ENABLED="true"
# 10분마다 /var/log/sysstat 혹은 /var/log/sa 에 기록한다.

sar
# CPU 사용량
sar -r
# RAM 사용량
sar -b
# I/O 사용량
sar -s  20:00:00 -e 20:30:00
# 특정 시간대 검색
sar -f /var/log/sysstat/sa06
# 이번달 06일 통계 


반응형