반응형
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분
- Uptime 에 대한 설명
https://linux.die.net/man/1/uptime
2. dmesg
- 리눅스 시스템에서 커널 메시지 버퍼를 확인하는데 사용됩니다.
- 커널이 부팅, 실행 중에 생성되는 메시지
- 하드웨어, 드라이버 초기화 메시지, 오류 및 경고 메시지
- /var/log/dmesg , /var/log/messages 에서 메시지를 읽어와서 사용자에게 표시 됩니다.
3. vmstat -> ( virtual memory statistics )
- 가상 메모리, 시스템의 상태를 모니터링 하는데 사용됩니다.
- procs
- process 에 관한 정보 , 실행 중인 프로세스, 대기 중인 프로세스 수, 종료된 프로세스 수
- memory
- 메모리 사용에 관한 정보를 제공, 실제 사용량, 스왑 사용량 , 버퍼 및 캐시 사용량
- swap
- io
- 입출력에 대한 정보 , 블록 입출력에 대한 통계 정보 ( 디스크 )
- system
- 시스템에 대한 정보 제공
- cpu
- CPU 사용에 대한 정보 제공
// 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 상태가 된다는 것이었다.
이처럼 기본적으로 컴퓨터 모니터링을 위한 명령어들을 알아보았습니다. 차후에 기회가 되면 더 명령어들에 대해서 더 자시히 알아보거나 더 나은 방법으로 모니터링 하는 방안에 대해서 다루어 보겠습니다 읽어 주셔서 감사합니다.
반응형
'DevOps 잡다구리' 카테고리의 다른 글
[ebpf] aya rust uprobe 실습 및 설명 (0) | 2024.07.10 |
---|---|
[eBPF] eBPF 관련된 링크 정리 (0) | 2024.04.01 |
Ansible을 이용하여 Elastic Stack 설치 (0) | 2021.11.03 |