해당 포스팅은 인프런 "리눅스 성능 분석 시작하기" 를 수강하고 정리한 글입니다 :)
- 리눅스 기반 os 에서 돌아가는 서버 시스템의 성능 측정 및 장애 대응에 대한 학습 내용 정리 글 입니다.
💡 리눅스 성능 분석의 기본 명령어
명령어 | 역할 |
uptime | 시스템 가동 시간, Load Average 확인 |
dmesg | 커널 메세지 확인 (OOME 발생 여부, SYN Flooding 여부) |
free | 메모리 사용 현황 확인 |
df | 디스크 여유 공간 및 inode 공간 확인 |
top | 프로세스들의 상태, CPU 사용률, 메모리 사용률 확인 |
netstat | 네트워크 연결 정보 확인 |
tcpdump | 네트워크 트러블 슈팅 분석을 위한 패킷 수집 명령어 |
업타임은 동작 중이면서 사용 가능한 기계의 시간을 백분율로 나타낸 시스템의 신뢰성의 측정이다 (위키백과)
✅ uptime 명령어
- 리눅스 uptime 명령어는, 시스템의 가동 시간, 로그인한 사용자 수, Load Average (1분, 5분, 15분) 를 확인할 수 있는 명령어 입니다.
load average 란
- 서버가 받고 있는 부하 평균 값 (CPU Usage 와 비슷와 비슷하지만 서버가 얼마나 일하고 있느지를 표현하는 또다른 방식)
- = 단위 시간 (1분, 5분, 15분) 동안의 R과 D 상태의 프로세스 개수
프로세스의 개수가 왜 중요할까?
❓ 왜 프로세스 개수를 평균을 내서 load average라는 값을 낼까
간단하게 정리하여, load average는 사용중인 프로세스의 개수 이기 때문에
- cpu 1대, 실행중인 프로세스가 1대 일 때 = load average 는 1 입니다.
- cpu 1대, 실행중인 프로세스가 2대 일 때 = load average 는 2 입니다. (이 때는 os 스케쥴링 알고리즘에의한 context switching 이 일어납니다.)
하지만 Load Average는 상대적인 값입니다.
↓
- 아래 사진처럼 똑같이 Load Average가 각각 1, 2 이라고 해도, CPU의 개수에 따라서 의미가 달라집니다.
- cpu 2, 프로세스 1 = load average 1
- cpu 2. 프로세스 2 = load average 2
❗️ 정리하자면
- load Average 가 CPU 개수보다 크다. → 즉, 처리 가능량을 넘어섰다는 것 → 서버에 부하가 간다는 것
CPU 개수 측정 명령어
- linux : lscpu -e
- mac os : sysctl hw.physicalcpu hw.logicalcpu
하지만 항상 괜찮을까~~? 그럴수도 있고 아닐수도 있따~
🧐 Load Average가 높은 이유는 뭘까? (이게 중요하다)
Load Average 는 R과 D 상태의 프로세스 개수의 평균값이라고 정의했습니다.
✔️OS 에서의 프로세스 상태를 크게 분류하면 6가지 상태로 분류할 수 있습니다.
- new (생성 상태) : 프로세스 생성 상태
- ready (준비 상태) : 생성된 프로세스가 CPU를 얻을때 까지 기다리는 상태
- running (실행 상태) : 프로세스의 명령어를 실행 중인 상태
- waiting (대기 상태) : 입출력을 요구한 프로세스가 입출력이 완료될 때 까지 기다리는 상태
- 효율성을 높이기 위해 입출력을 요청한 프로세스를 실행 상태에 두지 않고 대기상태로 따로 분류한다.
- terminated (완료 상태) : 프로세스가 종료된 상태
+ 보류상태 : 프로세스가 메모리에서 잠시 쫒겨난 상태 ( = 일시적 상태)
- 대부분 컴퓨터 성능을 떨어뜨리거나 실행을 미루어도 큰 지장이 없는 프로세스
이제 이 프로세스 상태들을 리눅스에서는 아래의 코드로 표현합니다. (출처)
코드 | 설명(영어) | 설명(한국어) |
D | Uninterruptible sleep (usually IO) | 깨울 수 없는 잠 (보통 IO) |
R | Running or runnable (on run queue) | 실행중 또는 실행가능 (실행 큐에 있음) |
S | Interruptible sleep (waiting for an event to complete) | 깨울 수 있는 잠 |
T | Stopped, either by a job control signal or because it is being traced. | 중지됨 (작업 제어 신호를 받거나 트레이싱 때문에) |
W | paging (not valid since the 2.6.xx kernel) | 페이징 (커널 2.6.xx 버전부터는 유효하지 않음) |
X | dead (should never be seen) | 죽음 (이런 게 보이면 안되는데) |
Z | Defunct ("zombie") process, terminated but not reaped by its parent. | 좀비 프로세스, 종료되었으나 부모 프로세스에 의해 수습되지 않음 |
👏🏻 R과 D 상태의 프로세스
즉 R과 D 상태란 실행상태와 대기상태를 의미합니다.
실행중인 프로세스 상태 확인 방법
- vmstat 명령어로 확인할 수 있습니다.
- vmstat 1 하면 백그라운드 실행
R (실행 상태) : cpu 위주의 작업
- cpu를 필요로하는(연산) 프로세스가 많다는 거기 때문에 CPU의 개수를 늘리거나
- 스레드의 개수를 조절해야 합니다.
→ CPU를 늘려서 더 많은 연산을 처리할 수 있도록 해주는게 일반적
D (대기상태 = b): I/o 위주의 작업
- D상태의 프로세스가 많다면, CPU보다 I/O작업에서 병목이 일어난다는 것 입니다.
- IOPS가 높은 디바이스로 변경하거나 처리량을 줄여 합니다.
- cpu 가 2대, load average 2 (D상태) 이면 CPU를 늘려도 load average 가 내려가지 않습니다. → 소용이 없음
- 더 많은 I/O를 처리할 수 있는 환경을 만들어 줘야한다.
-> 더 많은 IOPS(Input/Output Operations Per Second, IOPS) 를 가지는 ebs로 교체하는게 성능향상으로 이어지는 길!
📌정리
- ✔️ uptime 명령어를 통해 리눅스 환경에서 - cpu 가 얼마나 많은 부하를 받고있는지 확인할 수 있습니다.
- ✔️ load average가 cpu 의 개수 보다 많은 부하를 받고있다면 → 어떤 종류의 프로세스때문인지 확인합니다. (vmstat)
- ✔️ r 이면 cpu 바운드, b 면 I/O 바운드 이기 때문에 각각 상황에 맞는 대응을 해주어서 부하를 줄여줍니다.
'운영체제 > Linux' 카테고리의 다른 글
[Linux] top - 리눅스 CPU 사용량 보기 (0) | 2023.08.31 |
---|---|
[Linux] df - 디스크 사용량 모니터링 하기 (0) | 2023.08.28 |
[Linux] free - 메모리 사용량 확인하기 (0) | 2023.08.24 |
[Linux] dmesg - 리눅스 커널 로그 메세지 확인하기 (OOME, SYN Flooding) (0) | 2023.08.23 |
[Linux] 리눅스 파일 찾기, 파일 검색 - "find" 명령어 (0) | 2023.02.10 |