top 실행화면

[Linux] 리눅스 서버 리소스 점검

[Linux] 리눅스 서버 리소스 점검

리눅스 서버 리소스 모니터링의 중요성

서버를 운영하다 보면 “왜 갑자기 느려졌지?”, “메모리 부족인가?”, “CPU 사용률은 어떻지?” 같은 상황을 자주 마주하게 됨. 이런 상황에서 가장 먼저 사용하는 명령어가 바로 top과 free임.

이 두 명령어는 서버의 현재 상태를 실시간으로 파악할 수 있게 해주는 필수 명령어임.

top 명령어 – 실시간 프로세스 모니터

top 명령어란?

top은 현재 실행 중인 프로세스들을 CPU 사용률 순으로 정렬해서 실시간으로 보여주는 명령어임. 시스템의 전반적인 상태와 각 프로세스의 리소스 사용량을 한눈에 파악할 수 있음.

bash
# top

top 화면 구성 요소

image

시스템 요약 정보 (상단)

top - 21:59:16 up 25 days,  2:24,  1 user,  load average: 0.03, 0.13, 0.07
Tasks: 142 total,   1 running, 141 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.3 sy,  0.0 ni, 98.5 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3655.7 total,   2092.6 free,   1095.7 used,    839.2 buff/cache
MiB Swap:   4040.0 total,   4040.0 free,      0.0 used.   2560.0 avail Mem

각 라인의 의미:

항목의미중요 포인트
첫 번째 라인현재 시간, 가동 시간, 접속 사용자 수, 로드 평균로드 평균이 CPU 코어 수보다 높으면 주의
Tasks전체 프로세스 수와 상태zombie 프로세스가 있으면 문제 상황
%Cpu(s)CPU 사용률 세부 정보us(사용자) + sy(시스템)가 높으면 CPU 부하
MiB Mem메모리 사용 현황available 메모리가 부족하면 성능 저하
MiB Swap스왑 사용 현황스왑 사용량이 많으면 메모리 부족 신호

프로세스 목록 (하단)

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1234 root      20   0  162344   2284   1448 S   1.7   0.1   0:01.23 systemd
5678 mysql     20   0 1847696 345672  29384 S   8.3   8.5  12:34.56 mysqld
컬럼의미설명
PID프로세스 ID프로세스를 구분하는 고유 번호
USER사용자해당 프로세스를 실행한 사용자
%CPUCPU 사용률해당 프로세스의 CPU 점유율
%MEM메모리 사용률전체 메모리 대비 사용 비율
VIRT가상 메모리프로세스가 사용하는 가상 메모리 크기
RES물리 메모리실제로 사용하는 물리 메모리 크기
TIME+CPU 시간누적 CPU 사용 시간
COMMAND명령어실행 중인 프로그램명

top 유용한 단축키

기능능설명
q종료top 명령어 종료
1CPU 코어별 표시멀티코어 CPU의 각 코어 사용률 표시
M메모리 사용량 정렬메모리 사용량이 높은 순으로 정렬
PCPU 사용량 정렬CPU 사용량이 높은 순으로 정렬 (기본값)
k프로세스 종료특정 PID의 프로세스를 종료
u사용자 필터특정 사용자의 프로세스만 표시
c전체 명령어 표시COMMAND 컬럼에 전체 경로와 인수 표시

top 고급 옵션

bash
# top -u mysql        # mysql 사용자 프로세스만 표시
# top -p 1234,5678    # 특정 PID만 모니터링
# top -d 5            # 5초마다 업데이트 (기본 3초)
# top -n 3            # 3번만 출력하고 종료

free -m 명령어 – 메모리 사용량 확인

free -m이란?

free 명령어는 시스템의 메모리 사용 현황을 보여줌. -m 옵션을 붙이면 MB 단위로 표시되어 사람이 읽기 쉬워짐. 메모리 관련 문제를 진단할 때 가장 먼저 사용하는 명령어임.

bash
# free -m

free -m 출력 해석

              total        used        free      shared  buff/cache   available
Mem:           3952        1456        1234          45        1260        2138
Swap:          2047           0        2047

메모리 라인 해석

항목의미중요 포인트
total전체 메모리시스템에 설치된 총 메모리 용
used사용 중 메모리애플리케이션이 실제로 사용하는 메모리
free사용 가능 메모리완전히 비어있는 메모리
shared공유 메모리여러 프로세스가 공유하는 메모리
buff/cache버퍼/캐시시스템이 성능 향상을 위해 사용하는 메모리
available실제 사용 가능 메모리실제로 사용할 수 있는 메모리

available의 중요성

available은 free + buff/cache와 비슷하지만 더 정확한 값임. 리눅스는 사용하지 않는 메모리를 캐시로 활용하는데, 필요할 때 즉시 해제할 수 있음. 따라서 available 값이 실제로 사용할 수 있는 메모리량임.

스왑 라인 해석

Swap:          2047           0        2047
  • 스왑 사용량이 0이면 정상적인 상태
  • 스왑을 사용하기 시작하면 메모리 부족 신호
  • 스왑 사용량이 많으면 시스템 성능이 크게 저하됨

free 명령어 주요 옵션

옵션설명예시
-mMB 단위로 표시free -m
-gGB 단위로 표시free -g
-h사람이 읽기 쉬운 형태free -h
-s지정한 초마다 반복 표시free -s 5
-c지정한 횟수만큼 반복free -c 3
옵션설명예시-mMB 단위로 표시free -m-gGB 단위로 표시free -g-h사람이 읽기 쉬운 형태free -h-s지정한 초마다 반복 표시free -s 5-c지정한 횟수만큼 반복free -c 3

실무에서의 활용법

1. 서버 상태 빠른 점검

bash
# top

또는
# htop  # 더 보기 좋은 버전

# free -m

2. 메모리 부족 상황 진단

bash
free -m
# available이 전체의 10% 미만이면 메모리 부족

3. 메모리를 많이 사용하는 프로세스 찾기

bash
top에서 M 키를 눌러 메모리 순 정렬
또는
# ps aux --sort=-%mem | head -10

4. CPU 사용률 높은 프로세스 찾기

bash
top에서 P 키를 눌러 CPU 순 정렬
또는
# ps aux --sort=-%cpu | head -10

5. 지속적인 모니터링

bash
5초마다 메모리 상태 확인
# free -m -s 5

top을 3초마다 업데이트
# top -d 3

문제 상황별 대응 방법

CPU 사용률이 높을 때

  1. top으로 어떤 프로세스가 CPU를 많이 사용하는지 확인
  2. 해당 프로세스가 정상적인 작업인지 판단
  3. 필요시 kill 명령어로 프로세스 종료
  4. 로드 평균이 CPU 코어 수보다 지속적으로 높다면 CPU 업그레이드 고려

메모리 부족 상황

  1. free -m으로 available 메모리 확인
  2. top에서 M 키로 메모리 사용량 순 정렬
  3. 불필요한 프로세스 종료
  4. 스왑 사용량이 많다면 메모리 증설 고려

스왑 사용량이 높을 때

bash
스왑을 사용하는 프로세스 확인
# for file in /proc/*/status; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n | tail

모니터링 자동화

리소스 경고 스크립트 예시

#!/bin/bash
# 메모리 사용률이 90% 이상일 때 경고
AVAILABLE=$(free -m | grep '^Mem:' | awk '{print $7}')
TOTAL=$(free -m | grep '^Mem:' | awk '{print $2}')
USAGE=$((100 - (AVAILABLE * 100 / TOTAL)))

if [ $USAGE -gt 90 ]; then
    echo "WARNING: Memory usage is ${USAGE}%"
fi

추가 유용한 도구들

htop – top의 개선된 버전

bash
설치 (Ubuntu/Debian)
# sudo apt install htop

실행
# htop
  • 컬러풀한 인터페이스
  • 마우스 지원
  • 프로세스 트리 구조 표시

iostat – I/O 통계

bash
# iostat -x 1

CPU와 함께 디스크 I/O 상태도 확인 가능

댓글 남기기