← 전체 목록
서버백업운영

top과 iotop으로 서버 부하 급증 원인을 5분 안에 찾아냅니다

ℹ️ 본 글은 정보 제공 목적이며, 광고·제휴 링크가 포함될 수 있습니다.

서버 부하 급증 원인 분석 방법을 체계적으로 익히게 된 건 병원 사이트가 갑자기 느려졌는데 원인을 몰라서 그냥 서버를 재시작하고 넘어간 적이 몇 번 있었기 때문입니다. 재시작으로 해결됐지만 왜 느려졌는지 몰랐습니다. 이후 부하가 생기면 체계적으로 원인을 찾는 루틴을 만들었습니다.

CPU 부하 원인 파악

# CPU 사용률 상위 프로세스
top -b -n 1 | head -20

# 특정 프로세스의 CPU 사용 추적
top -p $(pgrep -d',' php-fpm)

# 1초 간격으로 5회 스냅샷
sar -u 1 5

# load average 확인 (1분/5분/15분 평균)
uptime
# 예: load average: 3.5, 2.1, 1.8 → CPU 코어 수보다 높으면 과부하

디스크 I/O 부하 파악

# 디스크 I/O 상위 프로세스 확인
sudo iotop -o -b -n 3

# 디스크 사용률 실시간
iostat -x 1 5

# 어떤 파일에 I/O가 몰리는지
sudo lsof | grep -E "(nginx|mysql|php)" | head -20

네트워크/연결 부하 파악

# 현재 TCP 연결 수
ss -s

# 상태별 연결 수 (ESTABLISHED, TIME_WAIT 등)
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

# 연결이 많은 IP 확인 (DDoS/스크레이퍼 의심)
ss -tan | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

# Nginx 활성 연결 수
curl http://127.0.0.1/nginx_status

MySQL 부하 파악

# MySQL 현재 실행 중인 쿼리
mysql -e "SHOW PROCESSLIST\G" | grep -v "Sleep"

# 슬로우 쿼리 실시간 확인
mysqladmin -u root -p processlist

# 테이블 락 확인
mysql -e "SHOW ENGINE INNODB STATUS\G" | grep -A 30 "LOCK WAIT"

부하 급증 시 진단 순서는 CPU → 메모리 → 디스크 I/O → 네트워크 → DB 순으로 확인합니다. 대부분의 경우 하나의 원인이 연쇄적으로 다른 지표를 끌어올리기 때문에 첫 번째 병목 지점을 찾는 것이 중요합니다.

편집 정책

AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.

작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)