Contents
see List서버에 성능 문제가 발생했을 때 빠르게 원인을 파악하는 능력은 시스템 관리자와 백엔드 개발자의 핵심 역량이다. 이 글에서는 Linux 시스템의 CPU, 메모리, 디스크, 네트워크 성능을 분석하는 도구들을 실전 시나리오별로 정리한다.
1단계: 60초 안에 전체 상태 파악
서버 문제 발생 시 가장 먼저 실행해야 할 명령어들이다.
# 1. 시스템 부하 확인 (가장 먼저)
uptime
# 10:30:00 up 45 days, load average: 8.25, 4.15, 2.30
# load average: 1분, 5분, 15분 평균
# CPU 코어 수 대비 높으면 과부하 (nproc으로 코어 수 확인)
# 2. 커널 메시지 확인 (OOM Killer 등)
dmesg -T | tail -20
# 3. 전체 시스템 상태
vmstat 1 5
# procs ---------memory--------- ---swap-- ----io---- -system-- -----cpu----
# r b swpd free buff cache si so bi bo in cs us sy id wa
# 4 0 0 245612 48320 1234560 0 0 12 156 2345 4567 45 10 40 5
# r: 실행 대기 프로세스 수 (CPU 코어보다 많으면 CPU 병목)
# b: I/O 대기 프로세스 수 (높으면 디스크 병목)
# 4. CPU 상세 (코어별)
mpstat -P ALL 1 3
# CPU %usr %sys %iowait %idle
# all 45.12 9.88 5.23 39.77
# 0 99.00 1.00 0.00 0.00 -- 특정 코어만 100%면 싱글스레드 병목
# 5. 프로세스별 CPU/메모리
pidstat 1 5
# 6. 디스크 I/O
iostat -xz 1 3
# Device r/s w/s rkB/s wkB/s await svctm %util
# sda 12.0 156.0 48.0 2496.0 4.5 1.2 18.7
# 7. 메모리 상세
free -h
# 8. 네트워크 인터페이스 통계
sar -n DEV 1 3
# 9. TCP 연결 상태
ss -s
# 10. 시스템 전체 요약
sar -u -r -d -n DEV 1 3
CPU 병목 분석
# top - 실시간 프로세스 모니터링
top -o %CPU
# 주요 단축키:
# 1: 코어별 CPU 표시
# M: 메모리 기준 정렬
# P: CPU 기준 정렬
# H: 스레드별 표시
# c: 전체 명령어 경로 표시
# htop - 더 직관적인 모니터링
htop -t # 트리 뷰
# 프로세스의 스레드별 CPU 사용량
top -H -p 478
# CPU를 많이 사용하는 프로세스의 시스템 콜 추적
strace -c -p 1234
# % time calls syscall
# 45.23 12345 futex
# 23.45 6789 write
# 12.34 3456 read
# perf로 CPU 프로파일링 (커널 레벨)
perf top -p 1234
# 어떤 함수에서 CPU를 많이 사용하는지 확인
# perf로 Flame Graph 데이터 수집
perf record -g -p 1234 -- sleep 30
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg
메모리 문제 분석
# 프로세스별 메모리 사용량 상세
ps aux --sort=-rss | head -20
# 특정 프로세스 메모리 맵
pmap -x 1234 | tail -5
# 메모리 누수 의심 시 - 시간별 RSS 추적
while true; do
echo "Sat Apr 4 08:13:22 KST 2026 " >> /tmp/mem_track.log
sleep 60
done
# OOM Killer 로그 확인
dmesg -T | grep -i "oom"
# 시스템 전체 메모리 사용 상세
cat /proc/meminfo | head -20
# slab 캐시 확인 (커널 메모리)
slabtop -o | head -20
디스크 I/O 분석
# 실시간 I/O 모니터링
iotop -oP
# 파일시스템 사용량
df -hT
# inode 사용량 (파일 수 제한)
df -i
# 디렉토리별 디스크 사용량
du -sh /var/log/* | sort -rh | head -10
# 큰 파일 찾기
find / -type f -size +100M 2>/dev/null | head -20
# 삭제했지만 프로세스가 아직 열고 있는 파일
lsof +L1
# 파일시스템 성능 벤치마크 - 순차 쓰기
dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fdatasync
# 1073741824 bytes (1.0 GB) copied, 2.345 s, 458 MB/s
# 랜덤 I/O (fio 사용)
fio --name=random-rw --ioengine=libaio --iodepth=16 --rw=randrw --bs=4k --size=1G --numjobs=4 --runtime=60 --group_reporting
네트워크 분석
# 연결 상태 확인
ss -tlnp # TCP LISTEN 포트
ss -tanp # 모든 TCP 연결
ss -s # 요약 통계
# 연결 수 상위 IP
ss -tn | awk '{print }' | cut -d: -f1 | sort | uniq -c | sort -rn | head
# TIME_WAIT 연결 수
ss -tan state time-wait | wc -l
# 네트워크 처리량
nload eth0 # 실시간 대역폭
iftop -i eth0 # 연결별 트래픽
# 패킷 캡처
tcpdump -i eth0 -nn port 8080 -c 100
# HTTP 응답 시간 측정
curl -o /dev/null -s -w 'Total: %{time_total}s
' https://example.com
종합 모니터링 도구
# glances - Python 기반 모니터링
pip install glances
glances
# 웹 모드: glances -w (http://localhost:61208)
# dstat - vmstat/iostat/netstat 통합
dstat -cdnm --top-cpu --top-mem 5
Linux 성능 분석은 uptime으로 시작하여 점차 상세한 도구로 좁혀가는 것이 효과적이다. 일상적으로는 top/htop과 vmstat을 활용하고, 깊은 분석이 필요할 때 perf, strace 도구를 사용한다. 가장 중요한 것은 평소 시스템의 정상 수치를 알고 있어야 이상 상황을 빠르게 감지할 수 있다는 점이다.