- Load가 높다/낮다고 표현하는 이 값의 의미는 무엇인지
- 시스템에 어떤 영향을 미치는지
- 이 값을 바탕으로 시스템의 부하를 어떻게 결정하면 좋은지
3.1 Load Average
[정의] R과 D 상태에 있는 프로세스 개수의 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 계산 방법
= CPU의 Run 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장