ログイン 出店する
← 가이드 목록
시작하기

CPU Utilization이란? CPU 사용률 100%가 의미하는 것부터 user·system·idle·iowait까지 쉽게 이해하기

CPU Utilization은 CPU가 얼마나 바쁜지를 나타내는 사용률입니다. 100%의 의미, user·system·idle·iowait·steal, Load Average와의 차이, Per-Core·Saturation까지 초보 기준으로 정리합니다.

CPU Utilization이란? CPU 사용률 100%가 의미하는 것부터 user·system·idle·iowait까지 쉽게 이해하기

모니터링에 `CPU 35%`·`CPU 100%`가 보이면 「바쁘구나」로 읽기 쉽습니다. 큰 방향은 맞지만, CPU가 시간을 쓰는 방식은 하나가 아닙니다. Linux `top` 등은 user · system · idle · iowait(환경에 따라 nice·irq·softirq·steal)로 나눕니다. CPU Utilization은 일정 시간 동안 CPU가 전체 시간 중 얼마나 실제 작업에 쓰였는지를 나타내는 비율입니다. 「90%」만으로는 무엇 때문에 바쁜지 알 수 없습니다.

직원 8시간 중 업무 6시간 · 대기 2시간 ≈ 75%
CPU도 관찰 시간 중 「일함」비율 ≈ Utilization

100% · Load Average와의 차이

Core 하나가 100%면 거의 쉬지 않고 일합니다. 그래도 무조건 장애는 아닙니다. Encoding·Batch는 100%가 목표일 수 있고, Web이 평소부터 포화면 새 요청이 대기하며 Latency가 늘 수 있습니다. 핵심은 서비스 목표 충족 여부입니다. Load Average는 「실행·대기 작업이 얼마나 많은가」, Utilization은 「CPU가 얼마나 바쁜가」입니다. 1 Core에서 A만 있어도 CPU 100%·Load≈1이고, B·C·D가 늘어도 CPU는 100%인데 Load만 커질 수 있습니다. Utilization만으로 혼잡도를 다 알 수 없습니다.

user system idle iowait 구분과 Utilization vs Saturation
근무 시간 비유 · CPU 상태 분류 · Utilization과 Run Queue(Saturation)

user · system · idle · iowait · steal

user는 Node·PHP·Java 등 사용자 공간 Application이 CPU를 쓴 시간(무거운 Loop·이미지·암호화·JSON 변환 등). system은 Kernel이 System Call·Network·File·Memory 등을 처리한 시간입니다. Usage를 항상 `user+system`만으로 단정하면 부족할 수 있습니다(irq·nice 등). idle은 실행할 작업이 없어 쉬는 시간 — idle이 높아도 DB가 느리면 사이트는 느릴 수 있습니다. iowait은 「CPU가 Disk를 기다리며 정확히 멈춘 %」로 단순화하기 쉽지만, 운영상 Idle인데 미완료 I/O가 있는 상황과 관련된 분류로 보는 편이 안전합니다. Storage 단서는 되나 Latency·IOPS·Queue Depth와 함께 봅니다. Core만 늘려도 Disk 병목은 안 풀릴 수 있습니다. nice는 낮은 우선순위 사용자 Process, irq/softirq는 Interrupt·Packet 처리, steal은 VM이 Host CPU를 못 받은 시간(공유 VPS에서 중요)입니다.

user 높음 → Application Profiling
system 높음 → Syscall · Network · File · Context Switch
iowait 높음 → Storage 지표 확인 (단정 금지)
steal 높음 → Host CPU 경쟁 (가상화)
idle 높은데 느림 → DB · Network · Lock

Per-Core · Saturation · USE · Headroom

8 Core에서 전체 12.5%라도 Core 하나만 100%일 수 있습니다(Node Event Loop 등 Single-Thread). 평균만 보지 말고 Per-Core를 봅니다. Utilization(얼마나 쓰는가)과 Saturation(대기 Queue가 생기는가)은 다릅니다 — CPU 100%여도 Runnable 1개와 1000개는 Latency가 다릅니다. USE Method(Utilization·Saturation·Errors)처럼 사용률·대기·오류를 같이 봅니다. Queueing·CPU Scheduling·Context Switching과도 이어집니다. Web은 Spike용 Headroom이 필요하고, 5분 평균만 보면 짧은 100% Spike를 놓칠 수 있습니다. Utilization ≠ Performance(Clock·Thermal Throttle·SMT). 도구에 따라 Process CPU가 Core당 100%·전체 800%로 보일 수 있으니 표시 기준을 확인합니다.

Profiling · Auto Scaling · 운영 팁

느림 → CPU 높음 → Process → Profiling(Hot Function·Flame Graph) 순이 자연스럽습니다. CPU 10%에 API 5초면 CPU 최적보다 DB Trace가 우선입니다. Auto Scaling에 CPU만 쓰면 I/O Bound·DB Pool 부족을 놓칠 수 있습니다. Request Rate·Queue·Latency를 함께. Container CPU Limit은 Throttling으로 Latency만 올릴 수 있습니다. 이미지 처리는 Web에서 빼 Worker로 분리하면 API와 CPU를 격리하기 쉽습니다. Right-Sizing은 Peak·Memory·Latency도 봅니다. SEO 전용 지표는 아니지만 포화로 Timeout·5xx가 늘면 UX·접근성에 간접 영향이 있습니다(서버 모니터링·503·Contention).

초보 FAQ

CPU 100% = 장애?

아닙니다. Batch는 정상일 수 있습니다. Latency·Queue를 함께 봅니다.

user vs system?

user는 Application 계산, system은 Kernel 작업에 가깝습니다.

Load와 차이는?

Usage는 바쁨(%), Load는 실행·대기 작업 부하입니다. Load Average 글을 참고하세요.

CPU 낮은데 느림?

가능합니다. DB·Disk·Network·Lock·외부 API를 확인합니다.

정리

CPU Utilization = CPU가 일정 시간 동안 얼마나 바쁘게 일했는지입니다. `user`(Application)·`system`(Kernel)·`idle`(쉼)·`iowait`(I/O 관련 Idle)·`steal`(VM이 Host CPU를 못 받음)을 구분해 보면 「CPU가 높다」만으로 부족한 이유가 보입니다. Per-Core·Run Queue·Latency를 함께 보고 Profiling으로 Hot Path를 찾습니다. 특히 헷갈리기 쉬운 항목이 있습니다. CPU는 많이 놀고 있는데 `iowait`만 높게 나올 때, 「CPU가 Disk를 기다리며 50% 멈춘다」로 읽기 쉽지만 실제 의미는 더 조심스럽습니다. `iowait` 높음만으로 Disk 고장을 단정할 수도 없습니다. 이처럼 Linux에서 CPU의 I/O 대기 관련 상태를 나타내는 지표I/O Wait(iowait)라고 합니다.