Snow flake

[command] top 명령어 본문

Programming/Linux

[command] top 명령어

MAYSON 2026. 9. 21. 21:10
반응형

ps는 명령어를 실행한 그 순간의 프로세스 상태만 보여주는 스냅샷 방식입니다. 반면 시스템 부하가 계속 변하는 상황을 실시간으로 지켜봐야 할 때는 화면이 계속 갱신되는 도구가 필요한데, 이때 사용하는 명령어가 top입니다.

top이란

top은 현재 시스템의 CPU, 메모리 사용량과 프로세스별 자원 점유율을 실시간으로 갱신해서 보여주는 명령어입니다. 별도 옵션 없이 실행하면 바로 화면이 뜨고, 기본적으로 몇 초마다 자동으로 갱신됩니다.

# 사용법
top

# 실행하면 아래와 같은 형태로 화면이 나타남 (예시)
top - 17:52:01 up 12 days,  3:41,  2 users,  load average: 0.42, 0.38, 0.35
Tasks: 182 total,   1 running, 181 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.2 us,  1.1 sy,  0.0 ni, 95.4 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :  15837.4 total,   3021.5 free,   8210.3 used,   4605.6 buff/cache

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2345 oracle    20   0  8123456 512340  98234 S   3.5   3.2   45:12.34 ora_pmon_ORCL
 5678 root      20   0  245678  32100  18234 S   0.3   0.2    2:10.55 sshd

화면 상단에는 시스템 전체 요약 정보(가동 시간, 로드 평균, CPU/메모리 사용률)가 나오고, 아래쪽에는 프로세스별 상세 정보가 자원 사용량 순으로 정렬되어 나옵니다.

상단 요약 정보 읽는 법

top 화면 맨 위쪽 몇 줄에는 시스템 전반의 상태가 요약되어 있습니다.

-- load average: 최근 1분/5분/15분 동안의 평균 부하. CPU 코어 개수보다 이 값이 지속적으로 높으면 부하가 걸리고 있다는 신호
-- Tasks: 전체 프로세스 수와 실행 중(running)/대기 중(sleeping)/멈춤(stopped)/좀비(zombie) 상태별 개수
-- %Cpu(s): us(사용자 프로세스), sy(시스템/커널), id(유휴), wa(디스크 대기), st(가상화 환경에서 하이퍼바이저에게 빼앗긴 시간) 등 CPU 사용 내역
-- Mem: 전체/사용 가능/사용 중/캐시 메모리 용량

좀비(zombie) 프로세스 개수가 계속 쌓이거나, wa(I/O 대기) 값이 높게 유지된다면 각각 프로세스 정리 문제나 디스크 병목을 의심해볼 수 있습니다. 가상 서버(VM) 환경에서는 st 값도 눈여겨볼 필요가 있는데, 이 값이 높다면 물리 서버 자체가 여러 VM에 과도하게 자원을 나눠주고 있다는 신호일 수 있습니다.

프로세스 목록에서 주요 컬럼

아래쪽 프로세스 목록에서 자주 확인하는 컬럼들입니다.

-- PID: 프로세스 번호 (ps 글에서 다뤘던 것과 동일하게, kill 명령어에 넘길 때 사용)
-- %CPU: CPU 사용률
-- %MEM: 메모리 사용률
-- RES: 실제로 사용 중인 물리 메모리량
-- COMMAND: 실행된 명령어 이름

top은 기본적으로 CPU 사용률(%CPU) 기준으로 내림차순 정렬되어, 가장 부하를 많이 주는 프로세스가 맨 위에 나타납니다.

top 실행 중 사용하는 단축키

top은 실행된 화면 안에서 몇 가지 키를 눌러 실시간으로 정렬 기준이나 보기 방식을 바꿀 수 있습니다.

# top 실행 중 입력하는 단축키 (명령어가 아니라 화면 안에서의 키 입력)

M    # 메모리(%MEM) 사용량 기준으로 정렬
P    # CPU(%CPU) 사용량 기준으로 정렬 (기본값)
c    # 명령어를 전체 경로로 표시/축약 표시 전환
k    # 특정 PID를 입력받아 그 자리에서 바로 종료(kill)
u    # 특정 사용자의 프로세스만 필터링해서 보기
q    # top 종료

k를 누르면 top 화면을 벗어나지 않고 PID를 입력받아 바로 종료 신호를 보낼 수 있습니다. ps로 PID를 찾고 별도로 kill 명령어를 입력하는 대신, top 화면 안에서 확인과 종료를 한 번에 처리할 수 있는 방법입니다.

top 실행 옵션

# -u : 특정 사용자의 프로세스만 표시
top -u oracle

# -d : 화면 갱신 주기를 초 단위로 지정 (기본은 보통 3초)
top -d 5

# -n : 지정한 횟수만큼만 갱신하고 자동 종료
top -n 1

-n 1은 스크립트 안에서 top을 활용할 때 자주 쓰입니다. top은 원래 화면이 계속 갱신되는 대화형 도구라 스크립트에 넣기 까다로운데, -n 1을 붙이면 한 번만 출력하고 바로 종료되기 때문에 로그로 남기거나 다른 명령어와 조합하기 편해집니다.

top vs ps, 언제 뭘 써야 할까

* 특정 시점의 상태를 스크립트나 로그로 남겨야 할 때 → ps (한 번 실행하고 결과를 grep, awk 등으로 가공하기 좋음)

* 지금 이 순간 시스템이 어떻게 돌아가는지 실시간으로 눈으로 지켜봐야 할 때 → top

장애 대응 중에는 이 둘을 같이 쓰는 경우가 많습니다. 먼저 top으로 실시간 상황을 보면서 어떤 프로세스가 자원을 많이 쓰는지 눈으로 확인하고, 그 PID를 가지고 ps나 kill로 구체적인 조치를 취하는 흐름입니다.

실무에서 자주 마주치는 상황

서버 응답이 느려졌다는 신고를 받았을 때, top으로 원인을 파악하는 흐름은 다음과 같습니다.

# 1단계: top 실행해서 실시간으로 부하 상황 확인
top

# 화면에서 특정 프로세스의 %CPU가 비정상적으로 높은 것을 확인했다고 가정
# (예: PID 9012, %CPU 98.5)

# 2단계: top 화면에서 나와, 해당 프로세스 상세 정보 확인
ps -ef | grep 9012

# 3단계: 문제가 확실하면 정상 종료 시도
kill 9012

# 4단계: 종료 확인 후 다시 top으로 부하가 내려갔는지 확인
top -n 1

top으로 "어떤 프로세스가 문제인지" 눈으로 확인하고, ps/kill 글에서 다뤘던 방식으로 구체적인 조치를 취하는 흐름입니다. 서버 부하 문제는 원인을 빠르게 특정하는 게 중요한데, top은 이 첫 단계를 가장 직관적으로 보여주는 도구입니다.

 

다만 실제 운영 환경에서는 top이나 ps만으로 모니터링을 끝내는 경우는 많지 않습니다. MaxGauge, Sherpa 같은 전문 DB/시스템 성능관리 솔루션을 도입해서 훨씬 세밀한 지표(세션별 대기 이벤트, SQL 실행 이력 등)를 GUI 대시보드로 확인하는 경우가 일반적입니다. TFA 수집이나 AWR 등의 로그를 수집하는 방법도 있지만요.

 

top이나 ps는 텍스트 기반이라 가독성이 떨어지고, 한 시점의 정보만 볼 수 있다는 한계도 있습니다. 그럼에도 불구하고 이런 명령어로 직접 시스템 상태를 읽는 감각은 중요합니다. 특히 테스트 환경이나 솔루션이 설치되지 않은 서버에서는 결국 top, ps 같은 기본 명령어로 상황을 파악해야 하는 경우도 있기 때문에, 평소에 이 출력값들을 보는 눈을 길러두는 것이 도움이 될거라 생각합니다.

반응형

'Programming > Linux' 카테고리의 다른 글

[command] wc, head, tail 명령어  (0) 2026.09.23
[command] netstat, ss 명령어  (0) 2026.09.22
[command] ln 명령어  (0) 2026.09.20
[command] awk, sed 명령어  (0) 2026.09.15
[command] scp, rsync 명령어  (0) 2026.09.15
Comments