본문 바로가기
카테고리 없음

Load Average 와 시스템 부하

by 한결이상 2020. 9. 20.

- Load가 높다/낮다고 표현하는 이 값의 의미는 무엇인지

- 시스템에 어떤 영향을 미치는지

- 이 값을 바탕으로 시스템의 부하를 어떻게 결정하면 좋은지

 

3.1 Load Average

[정의]  RD 상태에 있는 프로세스 개수의 1, 5, 15분마다 평균 값

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

 

- CPU Core 개수에 따라 Load Average 의미가 상대적
(
프로세스의 수를 세는 것이기 때문)

ex1) Run Queue에 2개의 프로세스가 있을 때, CPU Core 수가 1개 라면
하나의 프로세스가 처리되는 동안 나머지 프로세스가 대기 상태에 있어야 한다.
= 현재 시스템이 처리할 수 있는 프로세스보다 조금 더 많은 프로세스가 있다.

ex2) Run Queue에 2개의 프로세스가 있을 때, CPU Core 수가 2개 라면
프로세스는 2개가 동시에 처리될 수 있다.
= 현재 시스템에 처리 가능한 만큼의 프로세스가 있다.

 

3.2 Load Average 계산 과정

- 확인 가능한 명령어 : uptime, top

- Load Average 계산 방법

= CPURun Queue에 있는 running(R) 프로세스 개수 + uninterruptible(D) 프로세스

 

3.3 CPU Bound vs I/O Bound

- Load Average 값만으로는 시스템에 어떤 상태의 부하가 일어나는지 확인하기 어렵다.

- 부하를 일으키는 프로세스의 종류는 크게 두가지로 나눌 수 있다.

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

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

 

3.4 vmstat로 부하 정체 파악하기

어떤 부하가 일어나는지 구체적인 정보는 vmstat을 통해서 확인 가능

- vmstat 필드값

r : 실행 중이거나 실행 대기 중인 프로세스의 개수

b : I/O를 위해 대기열에 있는 프로세스 개수

 

r의 값이 높으면 CPU 부하 ↑

b의 값이 높으면 I/O 부하

 

※ b의 값이 높으면 I/O bound 프로세스 수가 많다는 의미로
   전체적인 시스템의 성능을 떨어트릴 수 있는 프로세스들이다.

※ Load Average가 낮다고 해도 시스템에 문제를 일으킬 수 있는 소지가 있음.

지속적으로 부하를 일으키는 프로세스가 있다는 의미이며, 의도하지 않은 불필요한 프로세스일 가능성이 있기 때문

 

3.5 Load Average 가 시스템에 끼치는 영향

- 같은 수치의 Load Average라도 부하를 일으키는 원인에 따라 시스템에 미치는 영향이 다르다.

- /proc/sched_debug 를 통해 Load Average 를 더 상세하게 볼 수 있음

  특히 nr_running과 runnable tasks 항목에서 각 CPU에 할당된 프로세스 수와 PID 등의 정보를 확인 할 수 있다.

 

[참고 서적]

리눅스 커널 이야기(강진우 저) : 3장