0x0102
DevOps - Load Average와 시스템 부하 본문
3-1 Load Average 정의
얼마나 많은 프로세스가 실행 중 혹은 실행 대기 중인지를 의미하는 수치
높다면 -> 많은 수의 프로세스가 실행 중이거나 대기 중
낮다면 -> 적은 수의 프로세스가 실행 중이거나 대기 중
그러나 이는 프로세스의 수를 세는 것이므로 CPU Core의 개수에 따라 의미가 상대적이다.
ex) Run Queue에 두 개의 프로세스가 동일하게 있어도(같은 Load Average라고 해도) CPU Core 개수에 따라 다른 의미를 갖는다.
3-2 Load Average 계산
uptime 명령은 /proc/loadavg 파일을 열어 내용을 읽고 출력해주는 명령어이다.
즉, Load Average 값을 직접 계산하는 것이 아닌 커널의 파일을 단순히 출력하는 것이다.
값을 계산하는 과정을 살펴보기 위해 strace 명령어로 시스템 콜을 분석해서 시작점을 찾아보면 분석 순서는 다음과 같다.
uptime > /proc/loadavg > fs/proc/loadavg.c > loadavg_proc_show() > get_avenrun() > avenrun 배열 > calc_global_load()
계산 과정을 정리하면 다음과 같다.
즉, Load Average는 상대적인 값이 아닌 계산 순간의 nr_running , nr_uninterruptible 상태의 프로세스 개수를 합한 값을 바탕으로 계산되는 것이다.
3-3 CPU Bound vs I/O Bound
Load Average 값만으로는 시스템에 어떤 부하가 일어나는지 확인하기 어렵다.
이 때, 부하를 일으키는 프로세스는 크게
nr_running (CPU 자원을 많이 필요로 하는 CPU Bound 프로세스) 과
nr_interruptible (I/O 자원을 많이 필요로 하는 I/O Bound 프로세스) 가 있다.
어떤 부하인지 중요한 이유는 부하의 종류에 따라 해결 방법이 달라지기 때문이다.
그렇다면 부하의 원인을 확인하는 방법을 알아보자.
3-4 vmstat으로 부하의 정체 확인
vmstat으로 r, b 값을 확인하여 어떤 종류의 부하가 발생했는지 알 수 있다.
r : 실행되기를 기다리거나 현재 실행되고 있는 프로세스의 개수 ( nr_running )
b : I/O를 위해 대기열에 있는 프로세스의 개수 ( nr_interruptible )
3-5 Load Average가 시스템에 끼치는 영향
같은 수치의 Load Average라고 해도 부하의 원인에 따라 영향이 다를 수 있다.
3-6 Case Study - OS 버전과 Load Average
Load Average와 관련하여 동일한 애플리케이션을 운영함에도 상이한 버전의 OS에서 Load Average 차이가 발생한 경우가 있다.
동일한 애플리케이션이라는 것은 프로세스의 개수 또한 같다는 뜻인데 어떻게 Load Average 차이가 발생하는 것일까?
이에 대해 앞서 했던 실습을 해보면, vmstat 명령을 했을 때 r과 b의 값이 모두 동일했다.
그러나 /proc/sched_debug 내용을 살펴보면 nr_running 의 개수와 runnable tasks 의 개수에서 차이가 발생했고, runnable tasks에는 실행하려는 스크립트들이 정상적으로 출력된다는 것을 토대로 커널에서의 측정 값에 문제가 있다는 것을 유추해 볼 수 있다.
실제로 커널의 버그로 발생한 이슈였으며 커널은 완벽하지 않고 지표가 제대로 수집되지 않을 수 있으므로 하나의 지표로만 모니터링하거나 시스템의 상태를 확인하지 말고 다양한 툴과 지표를 조합해서 운영해야 한다. Load Average 값을 절대적으로 신뢰해서는 안된다.
'Study > DevOps' 카테고리의 다른 글
DevOps - NUMA, 메모리 관리 새로운 세계 (1) | 2024.01.26 |
---|---|
DevOps - swap, 메모리 증설의 포인트 (0) | 2024.01.23 |
DevOps - free 명령이 숨기고 있는 것들 (1) | 2024.01.22 |
DevOps - top을 통해 살펴보는 프로세스 정보들 (0) | 2024.01.18 |
DevOps - 시스템 구성 정보 확인 (0) | 2024.01.17 |