리눅스 Load Average란?

리눅스에서 top 명령어 또는 uptime 명령어로 1분, 5분, 15분의 시스템의 평균 로드 지표인 Load Average를 통해 평균 부하 정도를 알 수 있습니다. Load Average는 CPU에 어느 정도의 일이 쌓이는지를 나타내는 것으로 정의 내릴 수 있습니다.
✅ 리눅스 Load Average의 이해
uptime 21:28:26 up x:xx, 2 users, load average: 2.11, 3.32, 4.31세 개의 숫자 (2.03, 20.17, 15.09)는 시스템에서의 1분,5분,15분 동안의 평균 부하를 나타 냅니다. 1코어의 단일 CPU 환경일 경우 평균 부하 1이 의미하는 것은 100% CPU를 사용하고 있다는 것을 의미합니다. 2코어일 경우는 50%, 4코어일 경우 25%를 사용하는 것을 의미합니다.

결국 단일 CPU 환경에서 부하 1과 4개의 CPU에서 부하가 4라는 것은 자원을 사용하는 양적인 측면에서 동일한 것으로 이해할 수 있습니다.
🔲 4코어 기준 Load Average 읽기: 부하 1 · 4 · 7
[man uptime]에는 Load Average가 CPU 개수로 나눈 값이 아니며, 부하 1은 단일 CPU 시스템에서는 늘 바쁜 상태이고 4 CPU 시스템에서는 75%를 쉰 상태라고 적혀 있습니다.
같은 방식으로 4코어 서버에서 부하 1 · 4 · 7을 읽으면 아래와 같습니다.
| 부하 | 네 코어 | 읽는 법 |
|---|---|---|
| 1 | 코어 하나 몫만 사용 · 셋 몫은 쉼 | 75%를 쉬는 상태 |
| 4 | 네 코어 몫을 모두 사용 | 쉬는 코어가 없는 한계선 |
| 7 | 네 코어 몫을 모두 사용 · 약 3개가 대기 | 코어 수를 넘어 줄이 선 상태 |
부하 7을 CPU 70%로 읽기 쉽지만, Load Average는 백분율이 아니라 실행 중이거나 기다리는 프로세스 수의 평균입니다. 그래서 같은 7이라도 1코어에서는 여섯 개가, 4코어에서는 약 세 개가 차례를 기다리는 숫자가 됩니다.
✅ 평균 부하가 높은 것의 의미
Load Average의 평균 부하가 높다는 것은 “어떤 이유로 높은가?”로 원인을 찾을 수 있습니다.
시스템의 주요 리소스는 CPU, RAM, 디스크 I/O 3가지와 네트워크를 볼 수 있으며, 서버에서의 문제 발생이 원인일 경우 시스템 엔지니어의 경우 RAM, 또는 CPU를 추가할지를 고민할 수 있고, 개발자의 경우 새로 수정한 코드가 느리게 실행되는지 체크를 고려할 수 있습니다.
✅ 부하의 원인 파악하기
구체적인 부하의 원인을 파악하기 위해 vmstat 명령어를 활용할 수 있습니다.
vmstat 2 5procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 xxxxxxx xxxxx xxxxxxxx 0 0 119 34 355 207 25 4 68 1 2
1 0 0 xxxxxxx xxxxx xxxxxxxx 0 0 0 20 4497 3649 17 2 81 0 0
9 0 0 xxxxxxx xxxxx xxxxxxxx 0 0 0 6 5586 4402 24 2 74 0 1
2 0 0 xxxxxxx xxxxx xxxxxxxx 0 0 0 0 6400 4831 26 2 69 0 2
3 0 0 xxxxxxx xxxxx xxxxxxxx 0 0 0 56 7558 5377 27 10 62 0 2b 열에 있는 프로세스가 많이 표시되는 경우 I/O 처리 과정의 문제를 체크 해 볼 수 있겠습니다.

✅ 부하가 오른 날 원인 찾기: 4코어에서 7 안팎
4코어 Nginx + Apache 서버에서 Load Average가 7 안팎까지 상승한 날, CPU가 먼저 찼고 메모리는 여유가 있었습니다.
숫자가 코어 수를 넘은 것을 확인해도 무엇이 부하를 올렸는지는 Load Average만으로 보이지 않으며, [top] 머리 줄과 [vmstat], [ps] 순서로 범위를 좁힙니다. [man uptime]에 따르면 Load Average에는 CPU를 사용하거나 차례를 기다리는 프로세스와, 디스크 같은 입출력을 기다리는 프로세스가 함께 들어갑니다.
1. 세 값의 흐름: top 머리 줄
[top]을 한 번만 실행해 머리 세 줄을 보면 Load Average와 프로세스 상태, CPU 사용 비율이 함께 나옵니다.
top -b -n 1 | head -3top - 21:28:35 up x:xx, 2 users, load average: 2.02, 3.28, 4.29
Tasks: 243 total, 4 running, 239 sleeping, 0 stopped, 0 zombie
%Cpu(s): 15.9 us, 8.3 sy, 15.9 ni, 56.8 id, 0.8 wa, 0.8 hi, 0.8 si, 0.8 st세 값은 1분, 5분, 15분 순서이므로 1분 값이 15분 값보다 크면 상승 중이고, 작으면 감소 중입니다. 위 출력은 1분 2.02가 15분 4.29보다 작아 감소 중이며, [%Cpu(s)] 줄의 [id]는 쉬는 비율, [wa]는 입출력을 기다린 비율입니다.
2. CPU 대기와 입출력 대기: vmstat
[vmstat] 출력에서 [r] 열이 코어 수보다 큰 줄이 이어지면 CPU를 기다리는 줄이 선 것이고, [b] 열과 [wa] 열이 상승하면 입출력을 기다리는 프로세스가 부하를 올린 것입니다.
메모리가 모자라 Swap을 사용하면 [si] · [so] 열이 0보다 커지며, 두 열이 0이면 Swap을 오가는 일은 없습니다.
3. 부하를 올린 프로세스 찾기: ps · top
CPU 대기로 확인되면 [ps]로 CPU 사용률이 높은 프로세스부터 정렬해 확인합니다.
ps -eo pid,ni,pcpu,comm --sort=-pcpu | head PID NI %CPU COMMAND
195597 0 16.0 php-fpm
194842 0 15.6 php-fpm
194833 0 14.4 php-fpm
196670 0 13.7 php-fpm
194880 0 13.4 php-fpm
194859 0 9.9 php-fpm
197332 0 9.8 php-fpm
1001 0 8.5 mariadbd
194934 0 8.3 php-fpm[%CPU]는 프로세스가 시작된 뒤 지금까지의 평균이라, 방금 부하를 올린 프로세스는 [top]을 실행한 뒤 [P] 키로 CPU 순으로 정렬해 함께 확인합니다.
🔢 FAQ & 추천 콘텐츠
ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.