devops
Load Average 정의 및 R, D 부하 해결방법 본문
Load Average?
프로세스의 여러 상태에서 Running(자원을 소모하고 있는 실행 상태), Uninterruptible Sleep(I/O 작업 처리를 대기 중인 ps상태, D 라고도 한다)에 있는 프로세스들의 개수를 1분, 5분 15분 단위로 평균을 만든 것이다.
- 값이 작을 수록 부하가 덜되었다는 의미
- 0.00 : CPU 사용률이 없다 (싱글코어 기준)
- 1.00 : CPU를 100% 사용 (싱글코어 기준)
- 1.00 이상인 경우, 2.00은 50%는 처리중, 50%는 대기중 (싱글코어 기준)
*1분 동안의 값이 15분에 비해 작으면 이는 장애가 발생한지 좀 지난 것으로 해석할 수 있다.
*15분 값에 비해 1분과 5분 값이 높으면 부하가 심해지고 있다고 해석할 수 있다.
여기서 Load Average가 높다는 의미는 많은 프로세스가 현재 실행 중이거나, 네트워크나 디스크 작업을 처리하기 위한 대기상태에 있다는 것이다.
프로세스가 Disk 읽기, 쓰기 혹은 네트워크 작업을 진행하면 디바이스에게 요청을 보낸다. 이 때 프로세스는 요청에 대한 응답이 올때까지 Wait Queue로 들어가 자신을 Uninterruptible 상태로 마킹한다.
이 상태의 프로세스가 많다는 것은 특정 요청이 끝나기를 기다리는 프로세스가 많은 것을 의미한다. 여기서 요청이 끝나면 프로스세의 상태는 다시 준비상태인 R로 돌아가게되어 시스템 부하 계산에 포함된다.
그래서 특정 프로세스가 D 상태에 오래 머무르는 것으느 다음 원인이 있을 가능성이 높다.
- 스토리지의 I/O가 종료되지 않은 상태
- 커널 내에 문제 발생
S(Sleeping) : 동작이 중지된 상태다. 인터럽트 신호를 받을때까지 멈춰있다. D와 달리 시그널을 받음연 바로 R 상태로 진입하여 처리할 수 있다. 시그널을 받을 때 바로 처리할 수 있도록 Interruptible 상태로 마킹된 후 대기상태로 변화노딘다.
Z(Zombie?) : 좀비 상태를 말한다. 부모 프로세스가 죽어버린 자식 프로세스의 상태다. 부모 프로세스가 비정상적인 동작으로 죽게되면 자식 프로세스는 좀비 프로세스가 된다. 다행히 사용 중지된 상태기 때문에 CPU를 소모하지 않고 메모리를 사용하지도 않는다. (PID는 소유, PID 고갈 문제가 있을 수 있음)
Load Average가 높다는 의미
Load Average는 D와 R의 상태를 포함한 프로세스의 개수가 핵심이다. 그리고 D와 R 중 어느 상태의 프로세스가 많은지도 구분해야 한다.
- R은 실행 중인 프로세스다. CPU 리소스를 사용 중인 상태다.
- D는 네트워크와 디스크 응답을 대기하는 프로세스다. I/O 부하를 의미한다.
두 부하를 구분하는 방법 : vmstat(Virtual Memory Statics)
현재 메모리와 CPU의 Utilization을 확인할 수 있는 도구다.
- r : 실행되기를 기다리거나 실행 중인 프로세스 개수 (CPU 리소스 부하)
- b : uninterruptible sleep 상태의 프로세스, i/o 대기열에 있는 프로세스 개수 (I/O 부하)
두 부하가 시스템에 주는 영향과 해결 방법
R 부하는 CPU 점유율의 경쟁 상대가 되기 때문에, 해당 프로세스의 성능 저하를 일으키게된다.
그러나 D 부하는 특정 프로세스가 장기간 I/O를 점유하고 있을 때 같으느 자원을 사용하려는 다른 프로세스의 I/O 처리를 위한 대기시간에 크게 영향을 끼치지 않기 때문에 상대적으로 CPU 부하와 다른 결과로 이어진다.
R 프로세스가 많을 때 해결방법
1. CPU, 메모리 사용량 외엔 정상적인 경우 : 프로그램의 로직, 알고리즘 개선 및 하드웨어 개선으로 대응
2. 특정 프로그램의 CPU 점유율이 매우 높은 경우 : 프로그램의 오류를 제거하여 정상 작동하도록 개선
D 프로세스가 많을 때 해결방법
1. 프로그램으로부터 입출력이 많아서 부하가 높은 경우 : 프로그램의 I/O 로직 개선
2. Swapping 발생으로 디스크 액세스가 발생하는 경우 : 프로그램을 개선 및 물리적인 RAM 확장
출처
'DevOps > OS' 카테고리의 다른 글
엔지니어라면 필요한 vim 주요 단축키 정리 (1) | 2023.01.10 |
---|---|
System has not been booted with systemd as init system (PID 1). Can't operate. / WSL Ubuntu 에러 해결방법 (0) | 2022.06.30 |
code . 명령어 not found 오류 발생 대처법 (0) | 2022.05.10 |
리눅스 Read, Write, Execute / 시스템 모니터링 uname, top, ifconfig, lsof, netstat (0) | 2022.04.22 |
Linux 운영체제 / 두번째 (0) | 2022.04.21 |