리눅스 시스템 기초 · 입문편 — 본문의 "N편"은 입문 과정 번호다. 번호별 글과 전체 250편 구성은 통합 로드맵에서 확인할 수 있다.

리눅스 시스템 기초 33 / 50 · Part 4. 프로세스·서비스·리소스
실습 환경: Rocky Linux 9 (10.0.0.200) · 상단 요약은 실습 환경 실제 출력
이전 글: 32. ps로 프로세스 분석

1. 들어가며

32편의 ps는 실행한 순간의 스냅샷 이다. 그런데 자원 문제는 대개 시간에 따라 변한다. CPU가 순간적으로 튀는지, 계속 높은지, 어떤 프로세스가 번갈아 자원을 먹는지 보려면 실시간 도구가 필요하다. 이것이 top이다.

관제 관점에서 top이 중요한 이유는 자원 이상이 침해의 첫 신호 인 경우가 많기 때문이다.

  • 채굴 악성코드(Cryptominer)는 CPU를 100% 가까이 쓴다.
  • 대량 연결·DDoS 도구는 CPU의 커널 시간(sy)과 네트워크 인터럽트를 늘린다.
  • 로그 폭증·대량 파일 암호화(랜섬웨어)는 디스크 I/O 대기(wa)를 늘린다.

이번 글은 top 상단 5줄의 의미를 정확히 읽는 방법에 집중한다.


2. 핵심 개념

2-1. top 화면 구성

영역내용
1행현재 시각, 가동 시간(up), 로그인 사용자 수, load average
2행프로세스 수: 전체, 실행(R), 대기(S), 정지(T), 좀비(Z)
3행CPU 시간 비율: us, sy, ni, id, wa, hi, si, st
4~5행메모리·스왑: total, free, used, buff/cache, avail
아래프로세스 목록 (기본 %CPU 순)

2-2. load average

실행 중(R)이거나 CPU를 기다리는 프로세스와 D 상태(I/O 대기) 프로세스의 평균 개수 를 1분·5분·15분 단위로 보여준다. 기준은 CPU 코어 수다.

코어 수load 2.0load 8.0
2가득 참 (100%)4배 과부하
825%가득 참

그래서 load average만 보고 판단하지 말고 반드시 nproc로 코어 수를 함께 본다. 또 Linux의 load에는 D 상태가 포함 되므로 CPU는 한가한데 load가 높다면 디스크·NFS 문제일 수 있다.

2-3. CPU 항목

항목의미높을 때 의심
us사용자 공간 코드채굴, 무거운 애플리케이션
sy커널 코드 (System Call 처리 등)대량 연결·파일 작업
ninice로 우선순위를 낮춘 프로세스채굴기가 들키지 않으려 nice를 쓰기도 함
id유휴
waI/O 대기디스크 병목, 대량 암호화·복사
hi / si하드웨어 / 소프트웨어 인터럽트네트워크 트래픽 폭증
st하이퍼바이저에 뺏긴 시간 (VM)호스트 과부하

2-4. 프로세스 목록 컬럼

컬럼의미
PR / NI우선순위 / nice 값 (-20 높음 ~ 19 낮음)
VIRT / RES / SHR가상 / 실제 / 공유 메모리
S상태 (31편)
TIME+누적 CPU 시간 (1/100초 단위)

3. 동작 원리

top 상단 5줄 해석 — 자원 이상은 여기서 먼저 보인다

top도 ps처럼 /proc을 읽는다. /proc/loadavg(load average), /proc/stat(CPU 시간), /proc/meminfo(메모리), /proc/<PID>/stat(프로세스)을 주기적으로(기본 3초) 다시 읽어 차이를 계산한다. CPU 사용률은 "직전 측정 이후 얼마나 CPU 시간을 썼는가"라서, 첫 화면(-n1)의 값은 짧은 구간 기준이다.

실습 환경에서 실행한 실제 상단 요약이다(2 vCPU, 유휴 상태).

top - 22:35:11 up 21 min,  0 user,  load average: 0.10, 0.07, 0.01
Tasks:  62 total,   1 running,  61 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   8032.1 total,   7053.6 free,    710.2 used,    568.5 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   7321.8 avail Mem

4. 실습

# 1) 기본 실행 (q로 종료)
top

# 2) 대화형 키
#   P: CPU 순  M: 메모리 순  1: 코어별 CPU  H: 스레드 보기
#   c: 전체 명령줄  u: 사용자 필터  k: PID에 시그널 보내기  o: 조건 필터(예: %CPU>50)

# 3) 기록용 — 배치 모드 1회
top -b -n1 -o %CPU | head -20 > top_$(date +%H%M).txt

# 4) 특정 프로세스만 추적
top -p "$(pgrep -d, httpd)"

# 5) 스레드 단위 CPU (어느 스레드가 CPU를 먹는가)
top -H -p <PID>

# 6) 코어 수와 load 함께 보기
nproc; cat /proc/loadavg

# 7) 짧은 간격으로 3회 기록 (추세)
top -b -d 2 -n 3 -o %CPU | grep -A5 '^  PID'

htop을 설치하면 색상·트리·마우스 조작이 가능해 대화형으로는 더 편하다. 하지만 기록·자동화에는 top -b 가 표준이다.


5. 결과 분석

아래 이상 상황 출력은 형식 설명용 예시다.

① 채굴 악성코드 의심 상황 (2코어)

top - 02:40:10 up 12 days,  1 user,  load average: 2.10, 1.95, 0.40
Tasks: 142 total,   3 running, 139 sleeping,   0 stopped,   0 zombie
%Cpu(s): 97.5 us,  1.0 sy,  0.0 ni,  1.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

  PID USER   PR NI  VIRT   RES  SHR S  %CPU %MEM   TIME+ COMMAND
 7811 apache 20  0 xxxx  24180 xxxx R 196.0  0.3 16:41.2 sysd
단서해석
load 1분 2.10 vs 15분 0.40최근 급격히 증가
us 97.5%사용자 프로그램이 CPU를 거의 독점
%CPU 196.02코어를 둘 다 사용 (100% × 코어 수까지 가능)
USER apache, 이름 sysd웹 계정이 시스템 프로세스처럼 보이는 이름으로 실행
TIME+ 16분최근 시작했는데 CPU 시간이 빠르게 쌓임

② I/O 병목 상황

load average: 6.80, 5.10, 3.20
%Cpu(s):  5.0 us,  3.0 sy,  0.0 ni, 12.0 id, 80.0 wa, ...

CPU는 한가한데 wa가 80%, load가 높다. D 상태 프로세스가 디스크를 기다리는 중 이다. 대용량 백업일 수도 있고, 랜섬웨어가 파일을 대량으로 읽고 쓰는 중일 수도 있다(40편 디스크 분석).


6. 보안 관점

공격top 징후추가 확인
채굴 (T1496)us 급증, 코어 수만큼 %CPU, 낮은 nice외부 채굴 풀 연결 (44편 ss)
DDoS 봇sy·si 증가, 스레드 다수대량 외부 연결
랜섬웨어wa 급증, D 상태 증가파일 대량 변경 (22편 find -newer)
fork bombTasks 급증, load 폭증같은 이름 프로세스 수
좀비 누적zombie 카운트 증가부모 프로그램 (31편)

채굴기 중에는 top이 실행되면 멈추거나, 사람이 없는 새벽에만 동작하는 것도 있다. 그래서 사람이 top을 보는 것보다 자원 사용률을 지속적으로 수집해 추세로 보는 것 (모니터링 시스템, SIEM의 메트릭)이 더 신뢰할 만하다.


7. SOC / 보안관제 활용

7-1. 자원 이상 시 1차 확인 순서

nproc; cat /proc/loadavg                          # 코어 대비 부하
top -b -n1 -o %CPU | head -15                     # CPU 상위
top -b -n1 -o %MEM | head -15                     # 메모리 상위
ps -eo pid,ppid,user,etimes,nlwp,args --sort=-%cpu | head -5   # 32편 헌팅 출력

7-2. 분석 흐름

[Alert]   모니터링: CPU 95% 이상 10분 지속, load 2코어에 2.1
   ↓
[top]     us 97% / 1위 프로세스 apache · sysd · %CPU 196
   ↓
[ps]      PPID 1, etimes 1000초, /tmp/.x/sysd, 인자에 채굴 풀 주소
   ↓
[ss]      외부 3333 포트 ESTAB (44편)
   ↓
[판단]    웹 취약점 경유 채굴기 → 침해
   ↓
[Response] kill -STOP → 증적 → 풀 주소 차단 → 설치 경로·지속성 제거 (34편)

8. 핵심 정리

  • top은 /proc을 주기적으로 읽는 실시간 자원 도구다. 기록에는 top -b -n1.
  • load average 는 R + D 상태 프로세스의 평균 수다. 반드시 코어 수(nproc)와 비교 한다.
  • CPU 항목: us(사용자) 급증 = 채굴 의심, wa(I/O 대기) 급증 = 디스크 병목·대량 파일 작업.
  • %CPU는 코어 수 × 100%까지 올라갈 수 있다.
  • 메모리 여유는 free가 아니라 avail Mem 으로 판단한다.
  • 사람이 보는 top보다 지속 수집한 추세 가 더 신뢰할 수 있다.

9. 다음 글

다음 글 「34. Linux Signal과 kill」 에서는 top의 k 키, 29편의 kill -STOP에서 쓴 시그널 을 정리한다. SIGTERM·SIGKILL·SIGSTOP의 차이, 잡을 수 없는 시그널, 그리고 침해 대응에서 증적을 지키며 프로세스를 멈추는 순서 를 다룬다.


참고 자료

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글