Linux Monitoring

김재현·2023년 8월 28일
0

Linux

목록 보기
12/12
post-thumbnail

리눅스에는 서버의 상태나 성능 측정을 목적으로 사용되는 명령어가 여러가지 존재한다.
그 중 많이 사용되는 명령어는 다음과 같다.

Top

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   
    ...
  1. 시스템 정보
  • load average: 시스템 부하 시간으로 1분, 5분, 15분 평균 부하량을 나타냄.

    이 수치는 CPU의 코어 수에 따라 부하량을 판단할 수 있다.

    1. 코어 수 보다 작을 경우: 시스템이 비교적 여유로운 상태
    2. 1 ~ 코어 수 정도 범위 내에 있을 경우: 시스템이 부분적으로 사용중인 상태
    3. 코어 수 보다 클 경우: 시스템이 부하 상태에 있고 응답 상태가 느려질 수 있음
  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 단위로 출력함.

  1. 프로세스 목록
    PID: 프로세스의 고유한 ID 값
    USER: 해당 프로세스를 실행한 사용자의 이름
    PR: 프로세스의 우선순위를 나타내며, 더 높은 값이 우선순위가 높다
    NI: nice 값으로 프로세스 우선순위를 조정하는데 사용됨
    %CPU: 해당 프로세스의 CPU 사용율
    %MEM: 해당 프로세스의 메모리 사용율
    TIME+: 프로세스가 실행된 시간 및 누적 실행 시간
    COMMAND: 해당 프로세스를 실행한 명령어 또는 프로그램의 이름

    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 의 가장 큰 특징은 모니터링 정보를 로그로 남긴다.
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 명령어는 시스템의 실행 시간과 평균 부하 시간을 확인할 수 있는 명령어이다.

# 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 명령어는 시스템 메모리 사용량을 보여준다.

# 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 명령어는 파일 시스템의 디스크 여유 공간 및 사용량을 보여준다.
특정 디렉터리나 마운트된 디스크의 상세 정보를 출력한다.

# 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

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

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 명령어는 네트워크 연결과 라우팅 테이블 정보를 보여준다.
현재 열려있는 포트 및 연결 상태를 확인할 수 있다.

# 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 명령어는 현재 실행 중인 프로세스의 상세 정보를 보여준다.

# 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 시간.

profile
SRE를 꿈꾸는 3년차 엔지니어

0개의 댓글