Research/Devops
[Review] 데브옵스 #2 왜 서버가 이렇게 느리지? CPU, RAM 그리고 디스크 I/O의 자원 고갈
JMcunst
2025. 6. 1. 20:24
728x90
반응형
왜 서버가 이렇게 느리지? CPU, RAM 그리고 디스크 I/O의 자원 고갈
"서버가 왜 이렇게 느리지?"라는 질문은 시스템 관리자라면 하루에도 몇 번씩 듣는 말이다.
서버 성능 저하의 원인은 다양하지만, 기본적으로 점검해야 할 세 가지는 CPU, 메모리(RAM), 그리고 디스크 I/O이다.
이 글에서는 데브옵스 책 2장을 읽고 실제 Linux 시스템에서 자원 고갈을 진단하고, 필요한 도구를 이용해 문제를 파악하는 방법을 정리한다.
1. 시스템 부하
$ uptime
14:00:31 up 10 days, 2:34, 2 users, load average: 2.15, 1.80, 1.75
- load average: 1분, 5분, 15분 동안의 평균 부하
- 부하 1.00은 논리 CPU 1개가 100% 점유된 상태를 의미
1.1. 평균 부하가 높다는 것은?
평균 부하가 높다고 해서 무조건 CPU 과부하는 아님. 아래 중 하나일 수 있다
유형 | 증상 | 확인 방법 |
CPU 부하 | us(user time), sy(system time) 증가 | top |
메모리 부족 | free 메모리 거의 없음, swap 사용 증가 | top, vmstat, /var/log/syslog (OOM 로그) |
디스크 I/O | wa(I/O wait) 증가 | iostat, iotop, top |
2. top을 이용한 부하 문제 진단
기본적인 것은 top 출력 정보로 어떤 리소스(CPU, RAM, 디스크 I/O)가 고갈됐는지 파악하는 것
주요 항목 | 설명 |
%us | 사용자 공간 CPU 사용량 |
%sy | 커널 공간 CPU 사용량 |
%wa | I/O 대기 시간 |
%id | 유휴 시간 |
KiB Swap | 스왑 사용량 |
스냅샷 통해 출력 결과 확인하기
$ top -b -n 1 > top_output
$ top -b -n 1 | tee top_output
2.1. 높은 사용자 시간(High User Time) 진단하기
- CPU에 부담을 주는 프로세스 확인
- top에서 %CPU 상위 프로세스 추적
- 필요 시 pidstat, perf top으로 세부 분석
2.2. 메모리 고갈 문제 진단하기
- top에서 free, available, swap 확인
- swap 사용이 많다면 RAM 부족 가능성
- /var/log/syslog에 OOM Killer 기록이 있는지 확인
$ dmesg | grep -i 'oom'
2.3. 높은 입출력 대기 문제 진단하기
- wa 값이 20~30% 이상이면 디스크 병목 가능성
$ iostat -x 1 3 # sysstat 필요
$ iotop -o # 실시간 I/O를 많이 쓰는 프로세스 확인
3. 현상 확인 후 과부하 문제 해결하기
3.1. sysstat 설정하기
$ sudo apt install sysstat
$ sudo vim /etc/default/sysstat
ENABLED="true"
$ sudo systemctl enable sysstat
$ sudo systemctl restart sysstat
3.2. 통계 정보 보기
목적 | 명령어 |
CPU 사용률 | sar -u 1 3 |
메모리 사용률 | sar -r 1 3 |
디스크 I/O | sar -b 1 3 |
3.3. 과거의 통계 정보 보기
$ sar -s 10:00 -e 11:00 # 시간대 지정
$ sar -f /var/log/sysstat/sa21 # 특정 날짜 파일
정리
서버가 느릴 때 “그냥 느려졌네”라고 넘기는 것이 아니라, 이유를 찾고 근거를 남기는 것이 프로다운 문제 해결이다.
CPU, RAM, 디스크 I/O는 세 가지 축이다.
이 세 축을 감시하고 정리하는 습관이 있다면, 서버는 느려져도 대응은 더 빠르고 정확해질 수 있다.
728x90
반응형