CentOS 시스템 성능 모니터링 완벽 가이드 서버 관리자가 알아야 할 필수 명령어와 도구

💻 서버가 느려졌는데 원인을 모르겠다고요? 이 글 하나면 CentOS 시스템의 모든 성능 지표를 실시간으로 파악할 수 있어요!

서버 관리를 하다 보면 가장 자주 마주치는 상황이 바로 **”시스템이 왜 이렇게 느리지?”**입니다. CPU 사용률이 높은 건지, 메모리가 부족한 건지, 아니면 디스크 I/O가 병목인지 정확히 파악하기 어려울 때가 많죠.

CentOS 시스템에서 성능 모니터링은 단순히 숫자를 보는 것이 아니라, 시스템의 건강 상태를 진단하고 문제를 사전에 예방하는 핵심 업무입니다.

Table of Contents

🎯 시스템 모니터링이 중요한 이유

서버 장애 예방의 첫 걸음

시스템 모니터링을 통해 얻을 수 있는 이점들:

  • 장애 발생 전 사전 대응 가능
  • 리소스 사용량 최적화로 비용 절감
  • 성능 병목 지점 정확한 파악
  • 용량 계획 수립을 위한 데이터 확보

실제로 대부분의 서버 장애는 갑작스럽게 발생하는 것이 아니라, 사전 징후가 있어요. 모니터링을 통해 이런 신호를 놓치지 않는 것이 핵심입니다.

📊 CentOS 기본 모니터링 명령어 마스터하기

top 명령어: 실시간 프로세스 모니터링의 왕

top

top 명령어 해석하는 법:

Tasks: 190 total,   1 running, 189 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  1.2 sy,  0.0 ni, 96.2 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7936.2 total,   1205.8 free,   3250.1 used,   3480.3 buff/cache
MiB Swap:   8191.0 total,   8191.0 free,      0.0 used.   4243.2 avail Mem

핵심 지표 해석

  • us (user): 사용자 프로세스 CPU 사용률
  • sy (system): 시스템 프로세스 CPU 사용률
  • id (idle): CPU 유휴 시간 (높을수록 좋음)
  • wa (wait): I/O 대기 시간 (높으면 디스크 병목)

htop: top의 강화된 버전

# htop 설치
yum install epel-release
yum install htop

# 실행
htop

htop의 장점:

  • 컬러풀한 인터페이스로 가독성 향상
  • 마우스 지원으로 직관적 조작
  • 프로세스 트리 뷰 제공
  • 실시간 정렬 및 필터링 기능

vmstat: 가상 메모리 통계의 전문가

# 2초마다 5번 출력
vmstat 2 5

vmstat 출력 해석:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1237516  98764 3569840    0    0     5    12   87  156  2  1 97  0  0

중요한 컬럼들

  • r: 실행 대기 중인 프로세스 수
  • b: I/O 대기 중인 프로세스 수
  • si/so: 스왑 인/아웃 (0이어야 함)
  • bi/bo: 블록 디바이스 I/O 읽기/쓰기

💾 메모리 사용량 모니터링 심화

free 명령어: 메모리 상태 한눈에 보기

# 사람이 읽기 쉬운 형태로 출력
free -h

# 1초마다 연속 출력
free -h -s 1

출력 예시:

              total        used        free      shared  buff/cache   available
Mem:           7.8G        3.2G        1.2G        195M        3.4G        4.1G
Swap:          8.0G          0B        8.0G

메모리 사용량 올바른 해석

  • used: 실제 애플리케이션이 사용하는 메모리
  • buff/cache: 시스템이 성능 향상을 위해 사용하는 캐시
  • available: 새로운 애플리케이션이 사용 가능한 메모리

중요한 포인트: buff/cache는 필요시 즉시 해제되므로, available 값을 기준으로 판단해야 합니다.

/proc/meminfo: 상세한 메모리 정보

cat /proc/meminfo | head -20

주요 메모리 지표들:

  • MemTotal: 전체 물리 메모리
  • MemFree: 사용되지 않는 메모리
  • Buffers: 파일시스템 메타데이터 캐시
  • Cached: 파일 내용 캐시

🔧 CPU 성능 모니터링 고급 기법

sar 명령어: 시스템 활동 보고서

# sar 설치 (sysstat 패키지)
yum install sysstat

# CPU 사용률 1초마다 10번 출력
sar -u 1 10

# 하루 동안의 CPU 사용률 평균
sar -u

sar 출력 해석:

12:00:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:00:02 PM     all      2.51      0.00      1.25      0.00      0.00     96.24

각 지표의 의미

  • %user: 사용자 공간에서의 CPU 사용률
  • %system: 커널 공간에서의 CPU 사용률
  • %iowait: I/O 완료를 기다리는 시간
  • %steal: 가상화 환경에서 다른 VM이 CPU를 사용하는 시간

mpstat: 멀티프로세서 통계

# 각 CPU 코어별 사용률
mpstat -P ALL

# 2초마다 5번 출력
mpstat -P ALL 2 5

멀티코어 시스템에서 특정 코어에 부하가 집중되는지 파악할 때 유용합니다.

💿 디스크 I/O 모니터링 전문가 되기

iostat: I/O 통계의 표준

# 기본 I/O 통계
iostat

# 확장된 통계 2초마다 5번
iostat -x 2 5

# 특정 디바이스만 모니터링
iostat -x sda 1

iostat 핵심 지표:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.05     0.89    0.86    1.45     44.17    15.67    51.84     0.01    4.87    2.43    6.33   0.75   0.17

중요한 컬럼들

  • r/s, w/s: 초당 읽기/쓰기 요청 수
  • rkB/s, wkB/s: 초당 읽기/쓰기 KB 수
  • await: 평균 응답 시간 (ms)
  • %util: 디스크 사용률

성능 판단 기준:

  • await > 10ms: 디스크 성능 이슈 의심
  • %util > 80%: 디스크 병목 상태

iotop: 실시간 I/O 사용량 프로세스별 추적

# iotop 설치
yum install iotop

# 실행
iotop

# I/O가 발생하는 프로세스만 표시
iotop -o

🌐 네트워크 성능 모니터링

iftop: 실시간 네트워크 트래픽

# iftop 설치
yum install epel-release
yum install iftop

# 특정 인터페이스 모니터링
iftop -i eth0

netstat: 네트워크 연결 상태 확인

# 모든 연결 상태 확인
netstat -an

# TCP 연결만 확인
netstat -nt

# 리스닝 포트 확인
netstat -lntp

ss: netstat의 현대적 대안

# 모든 TCP 연결
ss -t

# 리스닝 소켓과 프로세스 정보
ss -lntp

# 특정 포트 확인
ss -lntp | grep :80

🔍 고급 모니터링 도구들

nmon: 올인원 시스템 모니터

# nmon 설치
wget <http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz>
tar -xzf nmon_linux_14i.tar.gz
cp nmon_x86_64_centos7 /usr/local/bin/nmon

# 실행
nmon

nmon의 장점:

  • 대화형 인터페이스로 직관적 사용
  • CPU, 메모리, 디스크, 네트워크 통합 모니터링
  • 성능 데이터 파일 저장 기능

dstat: 시스템 리소스 통계

# dstat 설치
yum install dstat

# 기본 모니터링
dstat

# CPU, 메모리, 네트워크, 디스크 통합
dstat -cmdn

# 결과를 CSV 파일로 저장
dstat -cmdn --output system_stats.csv 1 3600

📈 시스템 로그 기반 모니터링

journalctl: systemd 로그 분석

# 시스템 부팅 이후 모든 로그
journalctl

# 특정 서비스 로그
journalctl -u httpd

# 실시간 로그 추적
journalctl -f

# 특정 시간 범위 로그
journalctl --since "2025-01-01" --until "2025-01-02"

중요한 시스템 로그 파일들

# 시스템 메시지
tail -f /var/log/messages

# 보안 로그
tail -f /var/log/secure

# 크론 작업 로그
tail -f /var/log/cron

🚀 자동화된 모니터링 스크립트 작성

기본 시스템 상태 체크 스크립트

#!/bin/bash
# system_check.sh

echo "=== 시스템 상태 보고서 ==="
echo "날짜: $(date)"
echo

echo "=== CPU 사용률 ==="
top -bn1 | grep "Cpu(s)" | awk '{print $2 $3 $4 $5 $6 $7 $8}'

echo "=== 메모리 사용률 ==="
free -h

echo "=== 디스크 사용률 ==="
df -h

echo "=== 시스템 로드 ==="
uptime

echo "=== 네트워크 연결 ==="
ss -tuln | wc -l
echo "총 연결 수"

성능 임계치 알림 스크립트

#!/bin/bash
# performance_alert.sh

CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=90

# CPU 체크
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
    echo "WARNING: CPU 사용률이 ${CPU_USAGE}%입니다!"
fi

# 메모리 체크
MEMORY_USAGE=$(free | grep Mem | awk '{printf("%.0f", $3/$2 * 100.0)}')
if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; then
    echo "WARNING: 메모리 사용률이 ${MEMORY_USAGE}%입니다!"
fi

# 디스크 체크
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print $5 " " $1}' | while read output;
do
    usage=$(echo $output | awk '{print $1}' | cut -d'%' -f1)
    partition=$(echo $output | awk '{print $2}')
    if [ $usage -ge $DISK_THRESHOLD ]; then
        echo "WARNING: 파티션 $partition 사용률이 ${usage}%입니다!"
    fi
done

📊 성능 데이터 시각화 및 분석

Grafana와 Prometheus 연동

CentOS에서 본격적인 모니터링 시스템을 구축하려면:

  1. Prometheus: 메트릭 수집 및 저장
  2. Node Exporter: 시스템 메트릭 수집 에이전트
  3. Grafana: 데이터 시각화 대시보드

성능 벤치마킹 도구들

# CPU 벤치마크
yum install sysbench
sysbench cpu --cpu-max-prime=20000 run

# 메모리 벤치마크
sysbench memory --memory-total-size=10G run

# 디스크 I/O 벤치마크
sysbench fileio --file-total-size=2G --file-test-mode=rndrw prepare
sysbench fileio --file-total-size=2G --file-test-mode=rndrw run

⚠️ 모니터링 시 주의사항과 베스트 프랙티스

1. 측정이 시스템에 미치는 영향 최소화

모니터링 도구 자체가 시스템 리소스를 소비하므로:

  • 적절한 샘플링 간격 설정 (1초보다는 5-10초)
  • 필요한 메트릭만 수집
  • 로그 파일 크기 관리

2. 임계값 설정의 중요성

리소스주의경고심각
CPU70%85%95%
메모리75%90%95%
디스크80%90%95%
로드 평균CPU 코어 수CPU 코어 수 x 1.5CPU 코어 수 x 2

3. 트렌드 분석의 중요성

단순히 현재 상태만 보지 말고:

  • 주간/월간 트렌드 분석
  • 계절성 패턴 파악
  • 성장률 예측을 통한 용량 계획

🛠️ 실무 트러블슈팅 시나리오

시나리오 1: 시스템이 갑자기 느려짐

1단계: 전체적인 상태 파악

uptime
top
free -h

2단계: 병목 지점 식별

iostat -x 1 5    # I/O 병목 확인
sar -u 1 10      # CPU 사용 패턴 분석

3단계: 프로세스 레벨 분석

ps aux --sort=-%cpu | head -10    # CPU 사용량 높은 프로세스
ps aux --sort=-%mem | head -10    # 메모리 사용량 높은 프로세스

시나리오 2: 메모리 부족 현상

진단 과정:

# 1. 메모리 사용 현황
free -h
cat /proc/meminfo | grep -E "(MemTotal|MemAvailable|SwapTotal|SwapFree)"

# 2. 스왑 사용 확인
swapon -s

# 3. 메모리 사용량 높은 프로세스
ps aux --sort=-%mem | head -20

# 4. 캐시/버퍼 상태
cat /proc/meminfo | grep -E "(Buffers|Cached)"

🎯 성능 최적화 실전 팁

1. 시스템 튜닝 기본 원칙

  • CPU: 프로세스 우선순위 조정, CPU 친화성 설정
  • 메모리: 스왑 사용 최소화, 캐시 활용도 증대
  • 디스크: 파일시스템 튜닝, I/O 스케줄러 최적화
  • 네트워크: TCP 버퍼 크기 조정, 네트워크 인터럽트 분산

2. 커널 매개변수 튜닝

# /etc/sysctl.conf 편집
vim /etc/sysctl.conf

# 메모리 관련 설정
vm.swappiness = 10              # 스왑 사용 최소화
vm.dirty_ratio = 15             # 더티 페이지 비율
vm.dirty_background_ratio = 5   # 백그라운드 쓰기 시작점

# 네트워크 관련 설정
net.core.rmem_max = 134217728   # 최대 수신 버퍼
net.core.wmem_max = 134217728   # 최대 송신 버퍼

# 적용
sysctl -p

📱 모바일 및 원격 모니터링

SSH 터널링을 통한 원격 모니터링

# 로컬에서 원격 서버의 Grafana에 접속
ssh -L 3000:localhost:3000 user@remote-server

# 포트 포워딩으로 모니터링 도구 접근
ssh -L 8080:localhost:8080 user@server

모바일 알림 설정

Telegram Bot이나 Slack 연동을 통해 임계치 도달 시 즉시 알림을 받을 수 있어요.

🔮 미래의 모니터링 트렌드

1. AI 기반 이상 탐지

머신러닝을 활용한 비정상적인 시스템 동작 패턴 자동 감지가 대세가 되고 있습니다.

2. 컨테이너 환경 모니터링

Docker와 Kubernetes 환경에서의 모니터링 방식이 급속도로 발전하고 있어요.

3. 클라우드 네이티브 모니터링

온프레미스와 클라우드 하이브리드 환경에서의 통합 모니터링이 중요해지고 있습니다.

🔄 마무리: 효과적인 모니터링 전략

CentOS 시스템 성능 모니터링의 핵심은:

  1. 기본 명령어 완전 숙달 → top, vmstat, iostat, sar
  2. 정기적인 성능 데이터 수집 → 트렌드 분석 기반 마련
  3. 자동화된 알림 시스템 → 장애 사전 예방
  4. 지속적인 최적화 → 수집된 데이터 기반 튜닝

성능 모니터링은 한 번 설정하고 끝나는 것이 아니라, 지속적으로 관찰하고 개선해나가는 과정입니다. 오늘부터 기본 명령어들을 하나씩 실습해보시고, 여러분만의 모니터링 노하우를 쌓아가시기 바랍니다!


💬 여러분의 모니터링 경험을 들려주세요! 어떤 도구를 주로 사용하시는지, 특별한 모니터링 팁이 있다면 댓글로 공유해 주세요.

댓글 남기기