본문 바로가기
OS/Linux Server

[리눅스커널이야기] Load Average 와 시스템 부하

by Haengsin 2022. 7. 26.

 

Load Average 와 시스템 부하

 

1. Load Average 의 정의

Load Average 란?

앞에서 확인한 프로세스의 상태 중 R(running)과 D(uninterruptible sleep) 상태에 있는 프로세스 개수의 1분, 5분, 15분 마다의 평균 값.

 

즉, 얼마나 많은 프로세스가 실행 중 혹은 실행 대기 중인가를 의미하는 수치.

Load Average 가 높다면 많은 수의 프로세스가 실행 중이거나 I/O 등을 처리하기 위한 대기 상태에 있다는 것이다.

 

CPU Core 수가 많을 수록, Load Average 가 낮다.

(하나의 Run Queue 에 두 개의 프로세스가 있고 하나만 실행되고 나머지 하나는 대기하는 것보다

서로 다른 CPU 에서 동시에 실행 될 수 있기 때문에)

 

uptime
# /proc/loadavg 파일을 열어서 그 파일의 내용을 읽고 화면에 출력해주는 명령.
# 즉, 직접 계산하는 것이 아닌 커널이 미리 준비해 둔 /porc/loadavg 를 단순히 읽어 보여주는 명령.
strace -s 65535 -f -t -o uptime_dump uptime
# 덤프 파일

 

※ strace

커널의 동작원리를 분석하기 위해 strace 로 시스템 콜을 분석해서 시작점을 찾는 것이 유용하다.

 

※ cat /proc/loadavg

 

2. CPU Bound  vs  I/O Bound

Load Average 는 상대적인 값이 아닌,

계산하는 순간을 기준으로 존재하는 R 상태의 프로세스 개수와 D 상태의 프로세스 개수를 합한 값을 바탕으로 계산.

 

즉, Load Average 가 높다는 것은 단순히 CPU 를 사용하려는 프로세스(R의 개수)가 많다는 것이 아니고

I/O 에 병목이 생겨서 I/O 작업을 대기하는 프로세스(D의 개수)가 많을 수도 있다는 의미이다.

 

부하를 일으키는 프로세스

위에서 작성하였듯이 크게 두 가지 종류로 나눌 수 있다.

(1) CPU 자원을 많이 필요로 하는 CPU Bound 프로세스

예시 1

(2) 많은 I/O 자원을 필요로 하는 I/O Bound 프로세스

예시 2

둘 다 uptime 명령어로 확인 시, 비슷한 수준의 Load Average 증가율을 보여주고는 있지만, 사실 일으키고 있는 부하는 전혀 다른 부하이다. 

- 전자의 경우, CPU 리소스를 너무 많이 사용해서 발생하는 부하.

- 후자의 경우, I/O 리소스를 너무 많이 사용해서 발생하는 부하.

 

부하의 종류에 따라서 해결 방법이기 달라지기 때문에 어떤 부하인지 파악하는 것이 중요하다.

CPU 가 단순히 더 많은 장비를 사용하는 것으로 해결할 수 없다는 것을 의미한다.

 

Load Average 자체의 절대적인 높음과 낮음은 없으며 현재 시스템에 장착되어 있는 CPU 코어를 기반으로 한 상대적인 값으로 해석해야 한다.

 

3. 부하의 원인 파악하기

vmstat으로 부하의 정체 확인.

Load Average 값은 시스템에 부하가 있다는 것을 알려주지만, 구체적으로 어떤 부하인지는 알 수 없다.

vmstat 을 통해서 확인할 수 있다.

두 출력 값 사이의 차이점은 바로 첫 번째 r 열과 두 번째 b 열 이다.

  • r - The number of processes waiting for run time. (R 상태의 프로세스, 현재 실행되고 있는 프로세스의 개수)
  • b - The number of processes in uninterruptible sleep (D 상태의 프로세스, I/O를 위해 대기열에 있는 프로세스의 개수)

vmstat 을 확인해 보면 CPU 가 일으키는 Load Average 인지, 아니면 I/O가 일으키는 Load Average 인지 확인해볼 수 있다.

b 열의 수가 높다면 I/O 처리 과정에 문제가 있지 않을 지 살펴보아야 한다.

 

※ /proc/shed_debug

proc 파일 시스템에 있는 파일로, 각 CPU 의 Run Queue 상태와 스케줄링 정보도 살펴볼 수 있다.

- 각 CPU 에 할당된 프로세스 수와 프로세스의 PID 등의 정보를 확인 가능하다.

 

 

Reference