리눅스에는 서버의 상태나 성능 측정을 목적으로 사용되는 명령어가 여러가지 존재한다.
그 중 많이 사용되는 명령어는 다음과 같다.
Top 명령어는 시스템의 현재 상태와 실행 중인 프로세스들의 정보를 실시간으로 모니터링하는 도구이다.
시스템의 자원 사용량, 프로세스 목록, 부하량 등을 실시간으로 확인할 수 있다.
# top
top - 10:00:43 up 8 min, 1 user, load average: 0.02, 0.07, 0.05
Tasks: 153 total, 1 running, 152 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
KiB Mem : 1881812 total, 1587180 free, 176524 used, 118108 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1566904 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 43596 3956 2572 S 0.0 0.2 0:01.20 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.12 rcu_sched
...
이 수치는 CPU의 코어 수에 따라 부하량을 판단할 수 있다.
- 코어 수 보다 작을 경우: 시스템이 비교적 여유로운 상태
- 1 ~ 코어 수 정도 범위 내에 있을 경우: 시스템이 부분적으로 사용중인 상태
- 코어 수 보다 클 경우: 시스템이 부하 상태에 있고 응답 상태가 느려질 수 있음
Tasks: 현재 실행 중인 프로세스와 관련된 정보를 나타냄.
total: 전체 프로세스의 수
running: 현재 실행 중인 프로세스의 수
sleeping: 대기 중인 프로세스의 수
stopped: 중지된 프로세스의 수
zombie: 좀비 프로세스의 수
%Cpu(s): 각 프로세스가 사용하고 있는 CPU의 사용율을 나타냄.
us: 사용자가 직접 프로그램을 실행하는데 소비되는 CPU 시간
sy: 커널이 시스템 서비스를 제공하는데 소비되는 CPU 시간
ni: Nice 값이 조정된 프로세스가 소비되는 CPU 시간
id: CPU가 아무 작업을 하지 않는 유휴 상태 CPU 시간
wa: I/O 작업을 기다리는 동안 소비되는 CPU 시간
hi: 하드웨어 인터럽트에 의해 소비된 CPU 시간
si: 소프트웨어 인터럽트에 의해 소비된 CPU 시간
st: 가상화 환경에서 하이퍼바이저가 물리적 CPU 자원을 다른 가상 머신에 할당하는 동안 소비된 CPU 시간
Nice 값: 프로세스의 우선순위를 조절하는데 사용되며, 우선순위가 낮을 수록 낮은 ni 값을 가진다.
KiB Mem: 메모리 사용량을 KiB 단위로 출력함.
total: 전체 시스템 메모리
used: 사용 중인 메모리
free: 여유 메모리
buffers: 버퍼로 사용 중인 메모리
cached: 캐시로 사용 중인 메모리
버퍼: I/O 작업을 위한 메모리 영역으로 파일 시스템에서 디스크로 데이터를 쓰거나 읽을 때, 데이터를 버퍼링하여 메모리에 임시 저장한다.
캐시: 사용하지 않는 메모리를 빠르게 활용하기 위해 데이터를 캐시에 저장한다.
자주 접근하는 파일이나 프로그램의 데이터를 메모리에 유지하여 읽기 작업을 빠르게 수행한다.
필요한 경우 데이터가 새롭게 메모리에 로드되기 전까지 남아있을 수 있다.
KiB Swap: 스왑 메모리 사용량을 KiB 단위로 출력함.
PR 값은 nice 값에 따라 동적으로 조정될 수 있다.
높은 nice 값을 더 낮은 PR 값을 생성하여 더 높은 우선순위를 갖게 된다.
일반적으로 -20 ~ 19까지 설정한다.VIRT: 가상 메모리 사용량을 KiB 단위로 나타내며 프로세스가 사용하는 가상 메모리 공간의 크기
RES: 실제 물리 메모리 사용량을 KiB 단위로 나타내며 실제로 상주중인 메모리의 양
SHR: 프로세스가 공유하는 메모리의 크기를 KiB 단위로 나타냄S: 프로세스의 상태를 나타냄
Running (R): CPU를 할당받아 명령어를 실행하고 있는 상태
Sleeping (S): 프로세스가 어떤 이벤트를 기다리며 대기 중인 상태
Stopped (T): 프로세스가 중지된 상태
Zombie (Z): 프로세스가 종료되었지만 부모 프로세스가 해당 프로세스의 종료 상태를 아직 수신하지 않은 상태
Wakekill (W): 프로세스가 시그널을 받아 종료 중인 상태
Waking (N): 프로세스가 종료되는 상태에서 벗어나기 위해 대기 중인 상태
Paging (D): 프로세스가 페이지 아웃되어 디스크에서 데이터를 로드하거나 페이지인 작업을 수행하는 상태
Paging (X): 프로세스가 페이지인 작업을 기다리는 상태
Sar 명령어는 리눅스에서 시스템 활동 및 성능 정보를 모니터링하기 위한 도구이다.
Sar 의 가장 큰 특징은 모니터링 정보를 로그로 남긴다.
Sar 는 기본적으로 10분마다 데이터를 수집한다.
sysstat 패키지를 설치해야 하고, 저장되는 위치는 /var/log/sa
디렉터리이다.
# sar
-u : CPU 사용률을 출력한다.
-r : 메모리 사용량 및 관련 통계를 출력한다.
-d : 디스크 정보를 출력한다.
-n : 네트워크 정보를 출력한다.
-q : 로드 평균 및 대기 큐 길이와 관련된 정보를 출력한다.
# sar -f /var/log/sa/saXX
-f 파일명 : /var/log/sa 디렉터리 내부에 저장된 파일을 읽을 때 사용한다.
# sar -u -s HH:MM:SS -e HH:MM:SS
-s, -e : 시작 시간과 종료 시간을 지정하여 정보를 출력한다.
# sar -u -o /var/log/sa/sar_cpu.log
-o : 사용률 정보를 대상 디렉터리에 로그 파일로 저장한다.
/var/log/sa/saXX 파일에는 시스템 활동 정보가 종합적으로 저장되지만,
-r, -u 옵션처럼 필터링하여 확인할 순 없다.
Uptime 명령어는 시스템의 실행 시간과 평균 부하 시간을 확인할 수 있는 명령어이다.
# uptime
11:07:28 up 131 days, 50 min, 4 users, load average: 10.05, 10.31, 10.82
11:07:28: 현재 시간
up 131 days, 50 min: 시스템 부팅 후 지난 시간
4 users: 현재 시스템에 로그인 한 유저 수
load average: 1분, 5분, 15분 동안의 시스템 로드 평균 (top 출력값과 동일함)
Free 명령어는 시스템 메모리 사용량을 보여준다.
# free -h
total used free shared buff/cache available
Mem: 503Gi 264Gi 4.5Gi 621Mi 233Gi 234Gi
Swap: 35Gi 30Gi 5.0Gi
total: 시스템에 설치된 전체 메모리
used: 현재 사용 중인 메모리
free: 아무런 데이터나 캐시로 사용되지 않는 사용 가능한 메모리
shared: 공유 메모리
buff/cache: 버퍼 및 캐시로 사용되는 메모리로, 필요에 따라 빠르게 사용 가능한 메모리로 변환될 수 있음.
available: 애플리케이션이 추가 메모리를 할당할 수 있는 메모리의 추정치
Df 명령어는 파일 시스템의 디스크 여유 공간 및 사용량을 보여준다.
특정 디렉터리나 마운트된 디스크의 상세 정보를 출력한다.
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 252G 0 252G 0% /dev
tmpfs tmpfs 252G 84K 252G 1% /dev/shm
tmpfs tmpfs 252G 664M 251G 1% /run
tmpfs tmpfs 252G 0 252G 0% /sys/fs/cgroup
/dev/mapper/VG00-root_lv xfs 274G 116G 158G 43% /
/dev/sda2 xfs 1014M 235M 780M 24% /boot
/dev/mapper/VG11-storage_lv xfs 1.9T 359G 1.5T 20% /storage
/dev/sda1 vfat 599M 5.8M 594M 1% /boot/efi
/dev/mapper/VG10-data_lv xfs 3.7T 2.3T 1.4T 63% /data
tmpfs tmpfs 51G 20K 51G 1% /run/user/0
/dev/sdl1 vfat 29G 4.8G 24G 17% /mnt
/dev/sdn1 vfat 30G 47M 30G 1% /wel
tmpfs tmpfs 51G 4.0K 51G 1% /run/user/1001
-T: 파일 시스템의 타입
-h: 사람이 읽기 쉬운 형태로 출력
Filesystem: 대상 파일 시스템
Type: 파일 시스템 타입
Size: 총 용량
Used: 사용중인 용량
Avail: 사용 가능한 용량
Use%: 사용중인 용량의 %
Mounted on: 마운트된 디렉터리 정보
Iostat 명령어는 디스크와 CPU의 입출력 통계를 보여준다.
디스크 I/O 속도와 CPU 사용량을 모니터링할 때 유용하다.
# iostat
Linux 4.18.0-477.10.1.el8_8.x86_64 (rhel88-test) 01/04/2024 _x86_64_ (64 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
12.62 0.00 1.67 1.35 0.00 84.36
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.41 2.43 22.12 27556144 250393358
sdc 0.14 0.86 11.29 9739061 127818550
sdb 225.01 186.12 2459.83 2107273793 27850739536
dm-0 2.26 1.99 21.01 22536986 237839410
dm-1 0.32 0.16 1.11 1763608 12518044
dm-2 0.10 0.58 11.29 6530357 127818550
dm-3 444.33 458.00 3426.59 5185554177 38796561356
loop0 0.00 0.00 0.00 49646 0
sde 221.08 272.29 966.76 3082914376 10945822516
loop1 0.00 0.00 0.00 12713 0
loop2 0.00 0.00 0.00 8797 0
sdn 0.00 0.01 0.00 59179 2
sdo 0.00 0.00 0.00 2876 0
Linux ...: 사용 중인 리눅스 커널 버전, 호스트 이름, 아키텍처, CPU 개수
avg-cpu: CPU 사용량의 평균 통계
%user: 사용자 모드에서 소비되는 CPU 시간 비율
%nice: nice 우선순위로 실행되는 작업에서 소비되는 CPU 시간 비율
%system: 커널에서 소비되는 CPU 시간 비율
%iowait: I/O 대기 시간 비율
%steal: 가상 머신 환경에서 다른 가상 머신에게서 훔치는 CPU 시간 비율
%idle: CPU가 아무 작업도 수행하지 않고 유휴 상태인 비율
Device statistics: 각 디스크 장치의 I/O 통계
tps: 초당 트랜잭션 수
kB_read/s: 초당 읽은 데이터 양 (킬로바이트)
kB_wrtn/s: 초당 쓴 데이터 양 (킬로바이트)
kB_dscd/s: 초당 폐기된 데이터 양 (킬로바이트)
kB_read: 누적 읽은 데이터 양 (킬로바이트)
kB_wrtn: 누적 쓴 데이터 양 (킬로바이트)
kB_dscd: 누적 폐기된 데이터 양 (킬로바이트)
Vmstat 명령어는 가상 메모리 통계, 프로세스, CPU, 디스크, 메모리 등 다양한 시스템 통계를 보여준다.
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 1 32505132 4434608 4480 244978704 0 0 7 54 0 0 13 2 84 1 0
procs: 프로세스 관련 통계
r: 실행 대기 중인 프로세스 수
b: 블록되어 있는 프로세스 수
memory: 메모리 관련 통계
swpd: 스왑된 메모리 양
free: 사용 가능한 메모리 양
buff: 버퍼로 사용되는 메모리 양
cache: 캐시로 사용되는 메모리 양
swap: 스왑 관련 통계
si: 초당 스왑인 양 (스왑 디스크로 읽은 양)
so: 초당 스왑아웃 양 (스왑 디스크로 쓴 양)
io: I/O 관련 통계
bi: 블록 디바이스에서 읽은 블록 수 (블록 인)
bo: 블록 디바이스로 쓴 블록 수 (블록 아웃)
system: 시스템 관련 통계
in: 초당 인터럽트 수
cs: 초당 컨텍스트 스위치 수
cpu: CPU 사용률 관련 통계
us: 사용자 모드에서 소비되는 CPU 시간 비율
sy: 커널에서 소비되는 CPU 시간 비율
id: CPU가 아무 작업도 수행하지 않고 유휴 상태인 비율
wa: I/O 대기 시간 비율
st: 스틸 (가상 머신 환경에서 다른 가상 머신에게서 훔친) CPU 시간 비율
Netstat 명령어는 네트워크 연결과 라우팅 테이블 정보를 보여준다.
현재 열려있는 포트 및 연결 상태를 확인할 수 있다.
# netstat -anlp | head -10
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:5951 0.0.0.0:* LISTEN 115421/qemu-kvm
tcp 0 0 127.0.0.1:5919 0.0.0.0:* LISTEN 490047/qemu-kvm
tcp 0 0 127.0.0.1:5952 0.0.0.0:* LISTEN 3940249/qemu-kvm
tcp 0 0 127.0.0.1:5920 0.0.0.0:* LISTEN 502144/qemu-kvm
tcp 0 0 127.0.0.1:5953 0.0.0.0:* LISTEN 1331830/qemu-kvm
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5922 0.0.0.0:* LISTEN 589787/qemu-kvm
tcp 0 0 127.0.0.1:5954 0.0.0.0:* LISTEN 115553/qemu-kvm
Proto: 프로토콜 (tcp, udp 등)
Recv-Q: 대기 중인 데이터를 받는 큐 크기
Send-Q: 대기 중인 데이터를 보내는 큐 크기
Local Address: 로컬 주소와 포트
Foreign Address: 외부 주소와 포트
State: 연결 상태 (LISTEN, ESTABLISHED, TIME_WAIT 등)
PID/Program name: 해당 연결을 처리하는 프로세스의 ID 및 이름
Ps 명령어는 현재 실행 중인 프로세스의 상세 정보를 보여준다.
# ps -ef | head -10
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2023 ? 00:10:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root 2 0 0 2023 ? 00:00:19 [kthreadd]
root 3 2 0 2023 ? 00:00:00 [rcu_gp]
root 4 2 0 2023 ? 00:00:00 [rcu_par_gp]
root 5 2 0 2023 ? 00:00:00 [slub_flushwq]
root 7 2 0 2023 ? 00:00:00 [kworker/0:0H-events_highpri]
root 9 2 0 2023 ? 00:01:20 [kworker/u128:0-bond0]
root 11 2 0 2023 ? 00:00:00 [mm_percpu_wq]
root 12 2 0 2023 ? 00:00:00 [rcu_tasks_rude_]
# ps -aux | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 240052 12660 ? Ss 2023 10:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root 2 0.0 0.0 0 0 ? S 2023 0:19 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 2023 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 2023 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< 2023 0:00 [slub_flushwq]
root 7 0.0 0.0 0 0 ? I< 2023 0:00 [kworker/0:0H-events_highpri]
root 9 0.0 0.0 0 0 ? I 2023 1:20 [kworker/u128:0-bond0]
root 11 0.0 0.0 0 0 ? I< 2023 0:00 [mm_percpu_wq]
root 12 0.0 0.0 0 0 ? S 2023 0:00 [rcu_tasks_rude_]
USER/UID: 사용자 또는 사용자 ID.
PID: 프로세스 ID.
%CPU: CPU 사용량의 백분율.
%MEM: 메모리 사용량의 백분율.
VSZ: 가상 메모리 크기 (KB).
RSS: 실제 메모리 크기 (KB).
TTY: 프로세스와 연결된 터미널 정보.
STAT: 프로세스 상태 (S: 실행 중, R: 대기 중, Z: 좀비 등).
START: 프로세스 시작 시간.
TIME: CPU 시간.