본문 바로가기
DevOps 잡다구리

[DevOps] Linux Performance Analysis in 60,000 Milliseconds 에 있는 명령에 대한 요약

by WhiteGoblin 2024. 4. 4.
반응형

https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55

 

Linux Performance Analysis in 60,000 Milliseconds

You log in to a Linux server with a performance issue: what do you check in the first minute?

netflixtechblog.com


여기에서 나오는 명령어 10개에 대한 정리입니다. 

한국어로 되어 있는게 없는거 같아서 정리하고자 이렇게 작성합니다. 

 

틀린 부분은 언제든지 알려주시면 감사하겠습니다. 

 

아래 명령어들은 리눅스에서 실행한다고 가정합니다.

1. Uptime 

  • uptime이 출력하는 값들 
uptime
>> 11:48  up 26 days,  1:49, 2 users, load averages: 1.46 1.62 1.97
// 현재시간| 실행시간           | 사용자 수| CPU 사용량       1분. 5분. 15분

 

2. dmesg 

  • 리눅스 시스템에서 커널 메시지 버퍼를 확인하는데 사용됩니다.
  • 커널이 부팅, 실행 중에 생성되는 메시지
    • 하드웨어, 드라이버 초기화 메시지, 오류 및 경고 메시지 
  • /var/log/dmesg , /var/log/messages 에서 메시지를 읽어와서 사용자에게 표시 됩니다.

 

3. vmstat -> ( virtual memory statistics ) 

// vmstat [options] [delay [count]]

vmstat 1 5 
// 1 초 간격으로 5번의 샘플을 출력한다.

 

4. mpstat ( multi processor statistics ) 

  • 다중 프로세서 시스템에서 각 CPU 의 사용률 및 성능을 모니터링하는데 사용된다. 
  • 여러개의 CPU 코어가 있는 경우 각 CPU 의 활용률을 실시간으로 표시할 수 있습니다.
// mpstat [options] [interval [count]]

mpstat 1 5

// 모든 CPU 보기
mpstat -P ALL

 

Linux 6.5.0-21-generic (node1) 	2024년 04월 04일 	_x86_64_	(8 CPU)

09시 36분 49초  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09시 36분 50초  all    3.57    0.13    2.30    0.26    0.00    0.00    0.00    0.00    0.00   93.75
09시 36분 51초  all    4.50    0.00    1.80    0.26    0.00    0.39    0.00    0.00    0.00   93.05
09시 36분 52초  all    3.08    0.00    1.41    0.13    0.00    0.00    0.00    0.00    0.00   95.38
09시 36분 53초  all    6.55    0.26    3.21    0.26    0.00    0.00    0.00    0.00    0.00   89.73
09시 36분 54초  all    4.07    0.13    2.41    0.13    0.00    0.00    0.00    0.00    0.00   93.27
Average:     all    4.35    0.10    2.23    0.20    0.00    0.08    0.00    0.00    0.00   93.04

 

시간(Time): 보고된 시간입니다. 여기서는 09시 36분 49초를 의미합니다.
CPU: CPU 번호를 나타냅니다. 일반적으로 멀티 코어 시스템에서는 각 코어를 나타냅니다.
%usr: 사용자 모드에서 CPU가 사용한 시간의 비율입니다.
%nice: nice 우선순위로 실행된 작업이 사용한 CPU 시간의 비율입니다.
%sys: 시스템 모드에서 CPU가 사용한 시간의 비율입니다.
%iowait: CPU가 I/O 작업을 기다리는 시간의 비율입니다.
%irq: 하드웨어 인터럽트에서 CPU가 사용한 시간의 비율입니다.
%soft: 소프트웨어 인터럽트에서 CPU가 사용한 시간의 비율입니다.
%steal: 가상화 환경에서 다른 가상 머신에서 CPU를 사용하는 시간의 비율입니다.
%guest: 가상화 환경에서 게스트 운영 체제에서 CPU를 사용하는 시간의 비율입니다.
%gnice: 게스트 운영 체제의 nice 우선순위로 실행된 작업이 사용한 CPU 시간의 비율입니다.
%idle: CPU가 아무 작업을 수행하지 않고 유휴 상태에 있는 시간의 비율입니다.

 

5. pidstat 

  • 프로세스 별로 CPU 사용률, 메모리 사용량 디스크 I/O 모니터링 하는데 사용됩니다
// pidstat [options] [interval [count]]

pidstat -u 1 5
  • -u CPU 사용률 표시 하도록 지정 , -r 은 메모리 , -d 디스크 사용률 
09시 47분 06초   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
09시 47분 07초     0         1    0.98    0.98    0.00    0.00    1.96     0  systemd
시간(Time): 보고된 시간입니다. 여기서는 09시 47분 06초를 의미합니다.
UID: 프로세스의 소유자 ID입니다.
PID: 프로세스 ID입니다.
%usr: 사용자 모드에서 CPU가 사용한 시간의 비율입니다.
%system: 시스템 모드에서 CPU가 사용한 시간의 비율입니다.
%guest: 가상화 환경에서 게스트 운영 체제에서 CPU를 사용하는 시간의 비율입니다.
%wait: 프로세스가 I/O 작업을 기다리는 시간의 비율입니다.
%CPU: 프로세스가 사용한 CPU 시간의 비율입니다. 이 값은 %usr 및 %system의 합과 같습니다.
CPU: 프로세스가 실행된 CPU입니다.
Command: 프로세스의 실행 파일명 또는 명령어입니다.

 

6. iostat

  • 디스크 I/O 활동에 대해서 모니터링 합니다.
// iostat [options] [interval [count]]


iostat 1 5

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda              51.00         8.00       176.00         0.00          8        176          0
sdb               0.00         0.00         0.00         0.00          0          0          0
Device: 디스크 디바이스의 이름을 나타냅니다.
tps: 초당 전송된 I/O 요청의 수입니다. "tps"는 "transactions per second"의 약자로, 디스크의 I/O 처리량을 나타냅니다.
kB_read/s: 초당 읽은 데이터의 용량입니다. "kB_read/s"는 "kilobytes read per second"의 약자로, 디스크에서 읽은 데이터의 평균 속도를 나타냅니다.
kB_wrtn/s: 초당 쓴 데이터의 용량입니다. "kB_wrtn/s"는 "kilobytes written per second"의 약자로, 디스크에 쓴 데이터의 평균 속도를 나타냅니다.
kB_dscd/s: 초당 폐기된 데이터의 용량입니다. "kB_dscd/s"는 "kilobytes discarded per second"의 약자로, 폐기된 데이터의 평균 속도를 나타냅니다.
kB_read: 총 읽은 데이터의 용량입니다.
kB_wrtn: 총 쓴 데이터의 용량입니다.
kB_dscd: 총 폐기된 데이터의 용량입니다.

 

7. free 

  • 메모리에 대한 모니터링을 제공 합니다. 
free -h

               total        used        free      shared  buff/cache   available
Mem:            7767        5702         144          92        1920        1660
Swap:              0           0           0

 

"total"은 시스템에 설치된 물리적 RAM의 총량을 나타냅니다.
"used"는 현재 다양한 프로세스에 의해 사용되고 있는 RAM의 양을 보여줍니다.
"free"는 현재 사용되지 않고 사용 가능한 RAM의 양을 나타냅니다.
"shared"는 여러 프로세스가 공유하는 RAM의 양을 나타냅니다.
"buff/cache"는 버퍼 및 캐시에 사용되는 메모리 양을 나타냅니다.
"available"는 현재 사용되지 않은 메모리와 버퍼 및 캐시를 해제하여 사용 가능한 메모리 양을 나타냅니다.

 

  • 그래서 실제로 prometheus 와 같은 모니터링 툴에서 이러한 요소들을 잘 고려해서 metric 들 가지고 오고 대시보드를 작성했던 기억이 있습니다.

 

8. sar

  • 네트워크 통계를 보여주는 명령어 
sar -n DEV 1 

14시 31분 29초     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
14시 31분 30초 lxccc70f94369a3      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14시 31분 30초        lo    123.00    123.00     19.92     19.92      0.00      0.00      0.00      0.00

 

IFACE: 네트워크 인터페이스의 이름을 나타냅니다. 예를 들어, eth0, wlan0 등이 될 수 있습니다.
rxpck/s: 초당 수신된 패킷 수입니다.
txpck/s: 초당 전송된 패킷 수입니다.
rxkB/s: 초당 수신된 킬로바이트(KB) 수입니다.
txkB/s: 초당 전송된 킬로바이트(KB) 수입니다.
rxcmp/s: 초당 수신된 압축 패킷 수입니다.
txcmp/s: 초당 전송된 압축 패킷 수입니다.
rxmcst/s: 초당 다중 캐스트 패킷 수입니다.
%ifutil: 네트워크 인터페이스의 사용률을 백분율로 나타냅니다.

 

9. sar -n TCP,ETCP 1

 

앞선 명령어와 동일한 명령어이지만 우리가 가장 많이 쓰는 TCP 에 대한 요약을 볼 수 있는 명령어이다 

sar -n TCP,ETCP 1
Linux 6.5.0-21-generic (node1) 	2024년 04월 04일 	_x86_64_	(8 CPU)

14시 37분 29초  active/s passive/s    iseg/s    oseg/s
14시 37분 30초      6.00      2.00   1527.00   3481.00

 

active/s: 초당 활성 TCP 연결 수를 나타냅니다.
passive/s: 초당 수동 TCP 연결 수를 나타냅니다. (대기 중인 연결 대기열에 있는 연결 수)
iseg/s: 초당 수신된 TCP 세그먼트(데이터 패킷) 수를 나타냅니다.
oseg/s: 초당 전송된 TCP 세그먼트(데이터 패킷) 수를 나타냅니다.

 

10. top 

  • top 의 경우 앞서 사용했던 명령어들을 다수 포함하고 있다. 
top - 14:39:22 up 36 days,  5:34,  2 users,  load average: 0.45, 0.56, 0.61
Tasks: 471 total,   1 running, 470 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.0 us,  1.8 sy,  0.0 ni, 91.6 id,  0.3 wa,  0.0 hi,  0.3 si,  0.0 st
MiB Mem :   7767.9 total,    232.3 free,   5599.8 used,   1935.8 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1763.1 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
2282000 root      20   0 2596328   1.5g  35968 S  18.9  19.6   7255:40 kube-apiserver
2281616 root      20   0 2083740  93628  26496 S  15.3   1.2   3150:51 kubelet
1695140 root      20   0   10.8g 198920  47360 S   5.3   2.5   2476:45 etcd

생략

 

PID: 프로세스 ID입니다. 각 프로세스에 고유한 식별자를 제공합니다.
USER: 프로세스를 실행한 사용자의 이름입니다.
PR: 프로세스의 우선순위를 나타냅니다.
NI: 프로세스의 nice 값입니다. 이 값은 프로세스의 우선순위를 조정합니다.
VIRT: 프로세스가 사용하는 가상 메모리의 크기입니다.
RES: 프로세스가 사용하는 실제 메모리의 크기입니다.
SHR: 공유 메모리의 크기입니다.
S: 프로세스의 상태를 나타냅니다. (예: S는 "Sleeping"을 의미합니다.)
%CPU: CPU 사용량을 백분율로 나타냅니다.
%MEM: 메모리 사용량을 백분율로 나타냅니다.
TIME+: 프로세스가 실행된 시간입니다.
COMMAND: 실행된 명령어 또는 프로세스의 이름입니다.

 

신기 했던건 top 를 돌리면 나머지 명령어들은 sleeping 처리가 되고 top 만 running 상태가 된다는 것이었다. 

 

이처럼 기본적으로 컴퓨터 모니터링을 위한 명령어들을 알아보았습니다. 차후에 기회가 되면 더 명령어들에 대해서 더 자시히 알아보거나 더 나은 방법으로 모니터링 하는 방안에 대해서 다루어 보겠습니다 읽어 주셔서 감사합니다. 

반응형