uptime


root@lima-default:~# uptime
 16:33:22 up 1 min,  1 user,  load average: 0.05, 0.02, 0.00

리눅스 및 유닉스 계열 운영체제에서 uptime 명령어는 시스템이 부팅된 이후 얼마나 오랫동안 켜져 있었는지(가동 시간)를 확인하는 명령어이다. 이와 함께 현재 로그인한 사용자 수와 시스템의 부하 평균(Load Average) 정보도 제공한다. 서버의 작동 상태나 갑작스러운 재부팅 여부를 간단히 점검할 때 매우 유용하게 쓰인다.

주요 출력 정보

터미널에 uptime 을 입력하면 다음과 같은 형태의 결과가 한 줄로 출력된다:

  • 현재 시간: 시스템의 현재 시각 (16:33:22)
  • 가동 시간: 시스템이 재부팅 없이 연속으로 작동한 기간입니다 (up 1 min)
  • 사용자 수: 현재 시스템에 로그인되어 있는 사용자 계정의 수입니다 (1 users)
  • 부하 평균: 최근 1분, 5분, 15분 동안의 시스템 평균 부하율(Load Average) (0.05, 0.02, 0.00)
    • 이 값이 CPU 코어 수보다 높으면 시스템이 과부하 상태임을 의미

자주 사용하는 명령어 옵션

  • uptime -p (Pretty): 가동 시간만 사람이 읽기 편한 포맷(예: up 2 weeks, 1 day, 3 hours)으로 요약하여 보여준다.
  • uptime -s (Since): 시스템이 마지막으로 부팅된 정확한 날짜와 시간을 출력한다.

top


root@lima-default:~# top
top - 16:33:22 up 1 min,  1 user,  load average: 0.04, 0.03, 0.00
Tasks: 130 total,   1 running, 128 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3899.1 total,   1917.0 free,    442.9 used,   1702.0 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   3456.3 avail Mem
 
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0   25316  14792  10200 S   0.0   0.4   0:01.99 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
      3 root      20   0       0      0      0 S   0.0   0.0   0:00.00 pool_workqueue_release

top 명령어는 리눅스 및 유닉스 계열 시스템에서 실시간으로 CPU 사용량, 메모리 사용량, 실행 중인 프로세스 목록 등 시스템의 전반적인 성능 상태를 모니터링하는 도구이다. 윈도우 운영체제의 ‘작업 관리자’와 유사한 역할을 하며, 시스템 부하나 리소스 소모 원인을 진단할 때 가장 기본적으로 사용된다.

화면 구성 및 주요 정보

명령어 실행 시 화면은 크게 상단의 시스템 요약 정보와 하단의 프로세스 상세 목록으로 나뉜다.

시스템 요약 정보

  • uptime / load average: 시스템 가동 시간 및 1분, 5분, 15분간의 평균 시스템 부하율
  • Tasks: 현재 실행 중(running), 대기 중(sleeping), 정지된(stopped), 좀비(zombie) 상태인 프로세스의 총 개수
  • %Cpu(s): 사용자가 사용하는 영역(us), 시스템이 사용하는 영역(sy), 유휴 상태(id), 대기 상태(wa) 등의 CPU 사용률 세부 지표
    • us (user): 일반 사용자 앱이 사용하는 CPU 비율
    • sy (system): 리눅스 커널 등 시스템이 사용하는 CPU 비율
    • ni (nice): 우선순위가 낮게 설정된 앱이 사용하는 CPU 비율
    • id (idle): 아무 일도 하지 않고 쉬고 있는 CPU 비율
    • wa (iowait): 디스크 하드웨어 반응을 기다리며 멈춘 CPU 비율
    • hi (hardware irq): 하드웨어 인터럽트 처리에 소모되는 CPU 비율
    • si (software irq): 소프트웨어 인터럽트 처리에 소모되는 CPU 비율
    • st (steal time): 하이퍼바이저가 가상 머신에서 빼앗아 간 CPU 비율
  • MiB Mem / MiB Swap: 전체, 여유, 사용 중인 물리 메모리(RAM) 및 스왑(Swap) 메모리 용량
    • total: 장착된 전체 물리 또는 스왑 메모리 용량
    • free: 현재 완전히 비어 있는 순수 여유 메모리 용량
    • used: 현재 프로그램들이 직접 차지하고 있는 메모리 용량
    • buff/cache: 디스크 속도를 높이기 위해 임시로 데이터를 선점해 둔 용량
    • avail Mem: 새 프로세스가 즉시 가져다 쓸 수 있는 실질적인 여유 용량

프로세스 상세 목록 (하단 컬럼)

  • PID: 프로세스 고유 식별 번호
  • USER: 프로세스를 실행한 사용자 계정
  • PR: 커널이 관리하는 프로세스의 실제 스케줄링 우선순위
  • NI: 사용자가 조절할 수 있는 우선순위 값 (-20 ~ 19, 낮을수록 우선순위가 높음)
  • VIRT: 프로세스에 할당된 전체 가상 메모리 크기 (실제 RAM + 스왑 + 예약 공간 포함)
  • RES: 프로세스가 실제 물리 RAM을 차지하고 있는 메모리 크기 (가장 눈여겨봐야 할 수치)
  • SHR: 다른 프로세스와 공유하고 있는 메모리 크기
  • S: 프로세스의 현재 상태 (R: 실행 중, S: 대기 중, Z: 좀비 등)
  • %CPU: 해당 프로세스가 사용 중인 CPU 비율
  • %MEM: 해당 프로세스가 사용 중인 물리 메모리(RES)의 비율
  • TIME+: 프로세스가 시작된 이후 총 CPU를 사용한 누적 시간
  • COMMAND: 프로세스를 실행한 명령어 명칭

실행 중 자주 쓰는 단축키

top 명령어가 실행된 상태에서 키보드를 누르면 실시간으로 정렬이나 화면 출력을 변경할 수 있다.

  • P: CPU 사용량 높은 순으로 프로세스 정렬
  • M: 메모리 사용량 높은 순으로 프로세스 정렬
  • 1: CPU 코어별 사용량을 개별적으로 확장하여 표시
  • k: 특정 프로세스 종료 (PID를 입력하여 kill 시그널 전달)
  • q: top 모니터링 화면 종료 후 터미널로 복귀

리눅스 시스템 관리를 더 시각적이고 직관적으로 하고 싶다면, top 을 개선하여 컬러 그래프와 마우스 클릭을 지원하는 htop 을 설치하여 사용하자.

vmstat


root@lima-default:~# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- -------cpu-------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st gu
 1  0      0 1964672  30004 1714180    0    0   409   582  196    0  0  0 99  0  0  0

vmstat (Virtual Memory Statistics) 명령어는 시스템의 프로세스, 메모리, 스왑, 입출력(I/O), CPU 활동 상태를 요약하여 보여주는 리눅스 모니터링 도구이다. 실시간 변화를 추적하는 top 과 달리, 지정된 주기에 따라 시스템 리소스의 전반적인 통계와 흐름을 한눈에 파악하고 병목 현상을 진단하는 데 주로 사용된다.

procs (프로세스 상태)

  • r (runnable): CPU 자원을 할당받기 위해 실행 대기열에서 기다리고 있는 프로세스의 수
    • 이 수치가 CPU 코어 수보다 지속적으로 크면 CPU 병목을 의미
  • b (blocked): 디스크 입출력(I/O)이나 네트워크 등 자원 처리가 끝나기를 기다리며 멈춰 있는 프로세스의 수

memory (물리 메모리 상태)

  • swpd: 디스크의 가상 메모리(스왑 공간)로 이동되어 사용 중인 메모리의 양 (단위: KB)
  • free: 현재 아무 용도로도 사용되지 않고 완전히 비어 있는 여유 메모리의 양 (단위: KB)
  • buff: 디스크 장치의 블록 데이터를 임시로 저장하는 버퍼 메모리의 양 (단위: KB)
  • cache: 읽었던 파일 데이터를 재사용하기 위해 임시로 저장하는 캐시 메모리의 양 (단위: KB)

swap (스왑 메모리 활동)

  • si (swap-in): 디스크(스왑)에서 물리 메모리(RAM)로 매초 읽어 들이는 메모리의 양 (단위: KB)
  • so (swap-out): 물리 메모리(RAM)가 부족하여 디스크(스왑)로 매초 밀어내는 메모리의 양
    • 이 수치가 지속해서 발생하면 RAM 증설이 필요

io (디스크 입출력 활동)

  • bi (blocks received): 디스크 등의 블록 장치로부터 매초 읽어 들인 블록의 수 (디스크 읽기 동작)
  • bo (blocks sent): 디스크 등의 블록 장치로 매초 내보낸 블록의 수 (디스크 쓰기 동작)

system (커널 및 시스템 활동)

  • in (interrupts): 매초 발생하는 하드웨어 및 소프트웨어 인터럽트의 횟수
  • cs (context switches): CPU가 실행할 프로세스를 교체하는 매초 동작 횟수
    • 이 수치가 과도하게 높으면 시스템 부하가 커짐

cpu (CPU 자원 사용률)

  • us (user): 커널 코드를 제외한 일반 사용자 앱 및 프로그램이 소비 중인 CPU 시간의 비율 (%)
  • sy (system): 리눅스 커널 코드 및 시스템 자체 프로세스가 소비 중인 CPU 시간의 비율 (%)
  • id (idle): 아무 일도 하지 않고 쉬고 있는 비어 있는 CPU 시간의 비율 (%)
  • wa (iowait): 디스크 입출력(I/O) 작업 완료를 기다리며 멈춰 있는 CPU 시간의 비율 (%)
  • st (steal): 가상화 환경(VM)에서 다른 가상 머신에 자원을 빼앗겨 대기한 CPU 시간의 비율 (%)
  • gu (guest): 가상 머신(가상 CPU)을 실행하는 데 소비한 CPU 시간의 비율 (%)

iostat


root@lima-default:~# iostat
Linux 6.17.0-6-generic (lima-default)   07/01/26        _aarch64_       (4 CPU)
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.33    0.02    0.30    0.03    0.00   99.32
 
Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
loop0             0.00         0.01         0.00         0.00         14          0          0
vda               5.88       202.90      1838.19       528.62     471744    4273766    1229024
vdb               0.20       130.86         0.00         0.00     304242          0          0

iostat (Input/Output Statistics) 명령어는 시스템의 CPU 사용 통계와 디스크 저장 장치(SSD/HDD)의 입출력(I/O) 부하 상태를 모니터링하는 도구이다. 앞서 top, vmstat 이 메모리와 CPU 중심이었다면, iostat 은 어떤 디스크 장치에서 병목 현상(느려짐)이 발생하는지 진단할 때 가장 핵심적으로 쓰인다.

상단 시스템 기본 정보

  • Linux 6.17.0-6-generic: 현재 운영체제의 리눅스 커널 버전
  • (lima-default): 호스트(서버)의 고유 이름 (Hostname)
  • 07/01/26: 데이터를 수집한 현재 날짜
  • _aarch64_: CPU의 아키텍처 계열 (64비트 ARM 구조)
  • (4 CPU): 시스템에 장착된 총 CPU 코어 개수

avg-cpu (전체 CPU 평균 사용 통계)

시스템 부팅 이후 현재까지 누적된 CPU 사용률의 평균 백분율(%)이다. (현재 시스템은 99.32%가 유휴 상태로 매우 여유로움)

  • %user: 일반 사용자 앱이나 프로그램이 소비한 CPU 비율
  • %nice: 우선순위(nice 값)를 낮추어 실행한 프로세스가 소비한 CPU 비율
  • %system: 리눅스 커널이나 시스템 자체 프로세스가 소비한 CPU 비율
  • %iowait: 디스크 입출력(I/O) 요청 처리를 기다리며 CPU가 아무것도 못 하고 대기한 비율
    • 이 수치가 높으면 디스크 성능이 서버 병목의 원인
  • %steal: 가상화 환경에서 다른 가상 머신에 자원을 빼앗겨 대기한 CPU 비율
  • %idle: 아무 일도 하지 않고 비어 있는 순수 유휴 CPU 비율

Device (디스크 장치별 입출력 통계)

시스템에 연결된 저장 장치별 상세 성능 지표이다.

  • Device: 디스크 장치의 이름 (vda, vdb는 가상화 환경에서 사용하는 가상 디스크 이름)
  • tps (Transactions Per Second): 디스크 장치에 초당 전달된 입출력 요청(읽기/쓰기 명령)의 횟수
  • kB_read/s: 디스크에서 초당 읽어 들인 데이터 양 (단위: KB)
  • kB_wrtn/s: 디스크에 초당 저장한(쓴) 데이터 양 (단위: KB)
  • kB_dscd/s: 초당 디스크에서 무효화하거나 버린(Discard/Trim) 데이터 양
  • kB_read: 시스템 부팅 이후 현재까지 해당 디스크에서 읽은 총 데이터 양
  • kB_wrtn: 시스템 부팅 이후 현재까지 해당 디스크에 쓴 총 데이터 양
  • kB_dscd: 시스템 부팅 이후 현재까지 해당 디스크에서 버린 총 데이터 양

현재 출력을 보면 메인 디스크인 vda 장치가 초당 약 1.8MB(1838.19 kB_wrtn/s) 속도로 누적 쓰기 작업을 가장 많이 처리하고 있음을 알 수 있다.

free


root@lima-default:~# free
               total        used        free      shared  buff/cache   available
Mem:         3992728      450724     1964492        1092     1744564     3542004
Swap:              0           0           0

free 명령어는 시스템의 물리 메모리(RAM)와 스왑(Swap) 메모리의 전체 용량, 사용량, 남은 여유 공간을 바이트 단위로 요약하여 보여주는 리눅스 명령어이다. top 이나 vmstat 보다 메모리 상태만 빠르고 직관적으로 확인하고 싶을 때 주로 사용된다.

가로축 항목 (메모리 상태 지표)

  • total: 시스템에 장착된 전체 메모리의 총 용량 (단위: KB)
  • used: 현재 실행 중인 프로세스들이 직접 차지하여 사용 중인 메모리 용량
  • free: 현재 어떤 용도로도 사용되지 않고 완전히 비어 있는 순수 여유 메모리 용량
  • shared: 프로세스 간에 데이터를 공유하기 위해 사용하는 공유 메모리(tmpfs 등)의 용량
  • buff/cache: 디스크 입출력 속도를 높이기 위해 리눅스 커널이 임시로 데이터를 선점해 둔 버퍼(Buffer)와 캐시(Cache) 메모리의 합산 용량
  • available: 시스템 전반에서 프로세스에 새롭게 실제로 할당해 줄 수 있는 실질적인 여유 메모리 용량
    • free 공간에 buff/cache 에서 즉시 회수 가능한 공간을 더해 계산되므로 메모리 부족 여부를 판단하는 가장 중요한 지표

세로축 항목 (메모리 종류)

  • Mem: 시스템에 장착된 실제 물리 메모리(RAM)의 상세 사용 현황
  • Swap: 물리 메모리가 부족할 때 디스크(SSD/HDD)의 일부 공간을 메모리처럼 쓰는 가상 메모리 영역
    • 현재 시스템은 0으로 설정되어 있어 스왑 기능이 비활성화된 상태

현재 시스템은 물리 메모리 전체 약 4GB(3992728) 중 실질 여유 공간(available)이 약 3.5GB(3542004)로 남아 있어 메모리 자원이 아주 넉넉하고 안정적인 상태이다.

strace


# /etc/systemd/system/dbus-broker.service.d/strace.conf
[Service]
PrivateTmp=no
ExecStart=
ExecStart=/usr/bin/strace -f -tt -o /run/dbus-strace.txt /usr/bin/dbus-broker-launch --scope system
 
# /run/dbus-strace.txt 예시 출력
6912 ... openat(AT_FDCWD, "/etc/machine-id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = -1 EACCES (Permission denied)

strace 명령어는 리눅스에서 특정 프로세스가 실행되는 동안 커널(Kernel)과 주고받는 모든 시스템 콜(System Call)과 신호(Signal)를 추적하고 기록하는 진단 도구이다. 프로그램이 내부적으로 어떤 파일에 접근하는지, 왜 멈췄는지, 어떤 오류로 실패했는지 ‘내부 동작 과정’을 확인하여 시스템 사용 문제를 해결할 때 매우 유용하게 사용된다.

주요 기능 및 특징

  • 시스템 콜 추적: 프로세스가 파일 읽기/쓰기, 네트워크 통신 등 커널 자원을 요청하는 동작을 실시간으로 감시한다.
  • 인자값 번역: 시스템 콜에 전달되는 복잡한 메모리 주소나 인자값을 사람이 읽을 수 있는 텍스트(파일명, 플래그 등)로 번역해 준다.
  • 높은 오버헤드 (주의 사항): 내부적으로 ptrace 시스템 콜을 기반으로 동작하기 때문에 대상 프로세스의 실행 속도를 100배 이상 느리게 만들 수 있어 운영 환경(Production)에서는 각별한 주의가 필요하다.

예시 옵션

  • -f (follow): 메인 프로세스뿐만 아니라, 자식 프로세스(포크된 프로세스)의 시스템 콜까지 누락 없이 모두 추적한다.
  • -tt: 각 시스템 콜이 실행된 정확한 시각을 밀리초(ms) 단위까지 기록한다.
  • -ttt: 시스템 콜 실행 시각을 Epoch 시간(1970년 1월 1일 이후 경과된 초)과 마이크로초(us) 단위로 상세히 표시한다.
  • -T: 시스템 콜 하나를 처리하는 데 소모된 순수 시간(초 단위)을 출력하여 병목 구간을 찾게 해준다.
  • -o: 화면에 출력되는 방대한 로그를 지정한 파일 경로로 저장한다.

출력 로그 항목 설명 (/etc/machine-id 거부 사례)

  • 6912: 해당 시스템 콜을 호출한 개별 프로세스의 고유 식별 번호 (PID)
  • openat: 커널에게 특정 경로에 있는 파일을 열어달라고 요청하는 시스템 콜 이름
  • AT_FDCWD, "/etc/machine-id": 프로세스가 접근을 시도한 대상 파일의 정확한 경로와 작업 디렉터리 위치
  • O_RDONLY|O_NOCTTY|O_CLOEXEC: 파일을 열 때 프로세스가 커널에 요구한 속성 옵션 (읽기 전용 등)
  • = -1: 시스템 콜 수행 결과 실패를 뜻하는 에러 리턴 값 (성공 시 0 이상의 파일 디스크립터 번호 반환)
  • EACCES: 리눅스 커널이 정의한 에러 명칭 (Error Access: 접근 권한 부족)
  • (Permission denied): 사람이 직관적으로 이해할 수 있도록 번역된 에러 메시지

제공된 사례의 분석 결과, dbus-broker 서비스가 정상 구동되지 못했던 원인은 시스템 고유 ID 파일인 /etc/machine-id에 접근할 권한이 없었기 때문임을 명확하게 진단할 수 있다.

tcpdump


root@lima-default:~# tcpdump -i eth0 -w /tmp/out.tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
^C
7985 packets captured
8996 packets received by filter
1010 packets dropped by kernel
 
root@lima-default:~# tcpdump -nr /tmp/out.tcpdump | head
reading from file /tmp/out.tcpdump, link-type EN10MB (Ethernet)
20:41:05.038437 IP 10.44.107.151.22 > 10.53.237.72.46425: Flags [P.], seq 18...
20:41:05.038533 IP 10.44.107.151.22 > 10.53.237.72.46425: Flags [P.], seq 48...
20:41:05.038584 IP 10.44.107.151.22 > 10.53.237.72.46425: Flags [P.], seq 96...

tcpdump 명령어는 명령줄(CLI) 기반의 네트워크 패킷 스니핑 및 분석 도구이다. 네트워크 인터페이스를 통과하는 패킷을 실시간으로 캡처하거나 파일로 저장하여, 향후 네트워크 장애 진단, 보안 침해 분석, 프로토콜 동작 검증 등 사후 분석을 수행할 때 필수적으로 사용된다.

주요 기능 및 특징

  • 패킷 스니핑 및 사후 분석: 네트워크의 실제 패킷 흐름을 감시(Sniffing)하고 파일(.pcap 등)로 저장하여 Wireshark 같은 전문 도구에서 상세히 분석할 수 있게 돕는다.
  • 정밀한 타임스탬프 제공: 각 패킷이 도착하거나 전송된 정확한 시각을 마이크로초(us) 단위까지 제공하여 패킷 간의 교환 순서와 지연 시간을 정밀하게 추적할 수 있다.
  • 최적화된 성능과 주의 사항: 소켓 링 버퍼(Socket Ring Buffers) 메커니즘을 사용하여 CPU 오버헤드가 크게 최적화되어 있으나, 트래픽이 몰리는 대규모 운영 환경에서는 여전히 상당한 시스템 부하를 유발할 수 있어 주의가 필요하다.

실행 및 통계 메세지 설명 (캡처 시)

  • -i eth0: 패킷을 감시할 대상 네트워크 인터페이스 카드(여기서는 eth0)를 지정하는 옵션
  • -w /tmp/out.tcpdump: 캡처한 원시(Raw) 패킷 데이터를 텍스트가 아닌 바이너리 파일 형식으로 저장하는 옵션
  • packets captured: tcpdump가 수신하여 저장 파일에 기록하는 데 성공한 패킷의 개수
  • packets received by filter: 필터 조건(지정하지 않았다면 전체)을 통과하여 tcpdump 가 처리하려고 시도한 패킷의 개수
  • packets dropped by kernel: 커널의 버퍼 공간이 부족하여 미처 처리하지 못하고 유실(Drop)된 패킷의 개수
    • 이 수치가 높다면 CPU 성능 부족이나 디스크 쓰기 병목을 의미하므로 -w 저장 경로를 램디스크 등으로 변경해야 함

출력 로그 항목 설명 (파일 읽기 시)

  • -nr /tmp/out.tcpdump: 저장된 패킷 파일로부터 데이터를 정방향 조회(Reverse lookup) 없이(IP와 포트를 이름으로 변환하지 않고 숫자로만 빠르게) 읽어오는 옵션
  • 20:41:05.038437: 패킷이 캡처된 시각 (시:분:초.마이크로초)
  • IP 10.44.107.151.22 > 10.53.237.72.46425: 출발지 IP 및 포트 번호(10.44.107.151의 SSH 22번 포트)에서 목적지 IP 및 포트 번호(10.53.237.72의 46425번 포트)로 패킷이 전송됨을 의미
  • Flags [P.]: TCP 플래그 정보 (여기서 P는 Push 플래그로 데이터를 즉시 상위 어플리케이션으로 전달하라는 의미이며, .은 갱신된 승인 번호(Acknowledgment)가 포함되어 있음을 의미)
  • seq 18...: 세션의 동기화를 위해 사용되는 TCP 시퀀스 번호의 범위

제공된 사례의 분석 결과, 현재 서버(10.44.107.151)의 22번 포트(SSH)를 통해 외부 사용자(10.53.237.72)에게 실시간으로 세션 데이터가 1초 미만의 매우 짧은 간격(마이크로초 단위 변동)으로 연속해서 전송되고 있는 정상적인 원격 접속 상태임을 진단할 수 있다.

netstat


root@lima-default:~# netstat -s
...
Tcp:
 736455 active connections openings
 176887 passive connection openings
 33 failed connection attempts
 1466 connection resets received
 3311 connections established
 91975192 segments received
 180415763 segments send out
 223685 segments retransmited
 2 bad segments received
 39481 resets sent
...
TcpExt:
 12377 invalid SYN cookies received
 2982 delayed acks
...

netstat 명령어는 시스템의 네트워크 상태와 프로토콜 통계를 다양하게 조회할 수 있는 멀티 툴(Multi-tool)이다. 옵션에 따라 인터페이스 통계, 라우팅 테이블, 활성화된 커넥션 목록 등을 종합적으로 분석할 수 있어 네트워크 사용 문제를 해결할 때 매우 유용하다.

주요 기능 및 옵션 역할

  • 기본 실행 (옵션 없음): 현재 시스템에 연결된 활성 커넥션 목록을 나열
  • -s (statistics): IP, TCP, UDP 등 다양한 네트워크 프로토콜의 세부 통계 데이터를 화면에 출력
  • -i (interface): 네트워크 인터페이스의 통계 정보를 츨력
  • -r (route): 시스템의 라우팅 테이블 정보를 조회
  • -p (program): 소켓을 사용 중인 프로세스의 상세 정보(PID 및 프로그램 이름)를 함께 표시
  • -c (continuous): 지정된 정보를 매 1초 간격으로 지속적으로 갱신하여 출력

출력 로그 항목 설명 (netstat -s 기준)

  • active connections openings: 로컬 시스템이 외부로 먼저 요청하여 시작된 TCP 커넥션(Active Open)의 누적 횟수
  • passive connection openings: 외부의 연결 요청을 받아들여 시작된 TCP 커넥션(Passive Open)의 누적 횟수
  • failed connection attempts: 연결 시도가 실패한 누적 횟수
  • connection resets received: 상대방 호스트로부터 강제 종료 신호(RST)를 수신한 횟수
  • connections established: 현재 정상적으로 연결되어 활성화되어 있는 TCP 커넥션의 개수
  • segments received / send out: 시스템이 수신 및 송신한 총 TCP 세그먼트 수
  • segments retransmited: 패킷 유실 등으로 인해 재전송된 TCP 세그먼트의 수
  • bad segments received: 손상되거나 잘못된 형태로 수신된 세그먼트의 수
  • resets sent: 로컬 시스템이 상대방에게 보낸 강제 종료 신호(RST)의 횟수
  • invalid SYN cookies received: 수신된 SYN 쿠키 중 유효하지 않은 응답으로 확인된 횟수
  • delayed acks: 네트워크 효율을 위해 즉시 보내지 않고 지연 후 전송된 ACK(확인 응답)의 횟수

slabtop


root@lima-default:~# slabtop
 Active / Total Objects (% used)    : 567692 / 571428 (99.3%)
 Active / Total Slabs (% used)      : 15717 / 15717 (100.0%)
 Active / Total Caches (% used)     : 337 / 415 (81.2%)
 Active / Total Size (% used)       : 110071.27K / 111759.16K (98.5%)
 Minimum / Average / Maximum Object : 0.01K / 0.20K / 8.88K
 
  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
245778 245616  99%    0.10K   6302       39     25208K buffer_head
 37569  37482  99%    0.19K   1789       21      7156K dentry
 35370  35370 100%    0.13K   1179       30      4716K kernfs_node_cache
 29190  29054  99%    0.09K    695       42      2780K trace_event_file
 10614  10601  99%    1.10K    366       29     11712K ext4_inode_cache
 ...

slabtop 명령어는 리눅스 커널의 슬랩 할당자(Kernel slab allocator) 메모리 사용 현황을 실시간으로 화면에 출력하고 정렬해 주는 진단 도구이다. 커널이 자신 내부의 자료 구조(파일 시스템 캐시, 버퍼, 네트워크 소켓 정보 등)를 위해 메모리를 어떻게 쪼개서 쓰고 있는지 세부 항목별로 추적할 때 사용된다.

상단 요약 정보 항목 설명

  • Active / Total Objects (% used): 커널이 할당한 전체 오브젝트(메모리 조각) 중 현재 실제 사용 중인 오브젝트의 개수 및 비율
  • Active / Total Slabs (% used): 오브젝트들을 담고 있는 물리 페이지 묶음(Slab)의 전체 개수 중 활성화된 슬랩의 개수 및 비율
  • Active / Total Caches (% used): 특정 용도별로 구분된 슬랩 캐시 종류의 전체 개수 중 활성화된 캐시의 개수 및 비율
  • Active / Total Size (% used): 커널 슬랩 할당자가 소비 중인 실제 물리 메모리의 전체 크기 및 실제 사용 비율
  • Minimum / Average / Maximum Object: 단일 커널 오브젝트가 가지는 최소, 평균, 최대 메모리 크기

하단 상세 목록 열(Column) 설명

  • OBJS: 해당 캐시에 할당된 총 오브젝트 개수
  • ACTIVE: 총 오브젝트 중 현재 커널이 실제로 사용 중인 오브젝트 개수
  • USE: 해당 캐시의 전체 공간 대비 실제 사용 중인 오브젝트의 공간 비율 (%)
  • OBJ SIZE: 단일 오브젝트 한 개가 차지하는 크기 (단위: K=킬로바이트)
  • SLABS: 해당 오브젝트들을 수용하기 위해 할당된 총 슬랩(Slab) 페이지 수
  • OBJ/SLAB: 하나의 슬랩 페이지 안에 들어갈 수 있는 오브젝트의 개수
  • CACHE SIZE: 해당 커널 캐시가 소비하고 있는 총 메모리 용량 (단위: K=킬로바이트)
  • NAME: 리눅스 커널이 명명한 커널 내부 자료 구조(캐시)의 이름

대표적인 커널 캐시(NAME) 유형 분석

  • buffer_head: 디스크 블록 입출력(I/O) 관리 및 매핑을 위한 캐시 (현재 출력에서 약 365MB로 가장 많은 공간을 차지하고 있음)
  • dentry: 파일 및 디렉터리 경로명 정보(디렉터리 엔트리)를 임시 보관하여 접근 속도를 높이는 캐시
  • kmalloc-X: 커널 내부에서 범용적으로 할당하여 사용하는 다양한 크기(X 바이트)의 메모리 공간
  • xfs_inode / ext4_inode_cache: 각 파일 시스템(XFS, EXT4) 내 파일의 고유 메타데이터(Inode) 정보를 담아두는 캐시

References