CPU Steal은 가상화 환경에서만 등장하는 개념으로,
“내 VM(가상머신)이 CPU를 쓰고 싶지만, 하이퍼바이저가 다른 VM에 CPU를 주느라 기다린 시간”을 의미합니다.
쉽게 말하면
- 물리 서버 하나에 여러 VM이 같이 CPU를 나눠 씀
- 내가 CPU를 요청했는데
- 다른 VM이 이미 쓰고 있어서 강제로 대기
👉 이 대기 시간이 바로 Steal time
개념 구조
|
1 2 3 4 5 6 |
[물리 CPU] ├── VM A (사용 중) ├── VM B (대기 → Steal 발생) └── VM C (사용 중) |
👉 VM B 입장에서는 “CPU가 놀고 있는 것처럼 보이는데 실제로는 못 쓰는 상태”
확인 방법 (Linux 기준)
top 또는 htop에서 확인 가능
|
1 2 3 4 5 |
%Cpu(s): us sy ni id wa hi si st ↑ steal |
st값 = CPU steal (%)- 예:
st = 15%
→ CPU 시간의 15%를 다른 VM 때문에 뺏김
왜 문제인가?
CPU steal이 높으면:
- 서버가 느려짐
- 응답 지연 증가
- CPU 사용률이 낮아 보여도 실제 성능은 나쁨
👉 특히 이런 상황에서 자주 발생:
- 클라우드 VM (AWS, Azure, GCP)
- 오버커밋된 호스트 (VM 너무 많이 올림)
기준 (실무 감각)
- 0~2% → 정상
- 5% 이상 → 주의
- 10% 이상 → 성능 문제 가능성 높음
- 20% 이상 → 거의 확실히 문제
해결 방법
- VM 스펙 업 (vCPU 증가)
- 더 좋은 인스턴스로 이동
- shared → dedicated
- 호스트 변경 (cloud 재배치)
- CPU overcommit 적은 환경 사용
- Burst 타입이면 크레딧 확인
핵심 요약
- CPU steal = “남 때문에 CPU 못 쓰고 기다린 시간”
- VM 환경에서만 발생
- 높으면 성능 병목 원인
예제
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
top - 09:53:50 up 48 days, 22:45, 1 user, load average: 0.44, 0.39, 0.27 Tasks: 157 total, 1 running, 156 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.4 us, 0.2 sy, 0.0 ni, 97.0 id, 0.2 wa, 0.0 hi, 0.0 si, 0.2 st ↑ steal MiB Mem : 963.4 total, 107.2 free, 631.1 used, 225.2 buff/cache MiB Swap: 3812.0 total, 2916.9 free, 895.1 used. 133.6 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1489961 www-data 20 0 437752 110072 44784 S 17.7 11.2 0:36.70 apache2 1422617 mysql 20 0 3180756 81120 6128 S 3.3 8.2 29:09.44 mysqld |
PU 부분
|
1 2 3 |
%Cpu(s): 2.4 us, 0.1 sy, 97.2 id, ... 0.2 st |
👉 중요한 값:
- idle (id) = 97.2% → CPU 거의 놀고 있음
- steal (st) = 0.2% → 거의 0 수준
해석
👉 현재 상태는:
- CPU 여유 충분
- steal 거의 없음
- load average도 낮음 (0.44 / 0.39 / 0.27)
➡️ CPU / Steal 관련 병목은 전혀 아님
그럼 성능 문제 있다면 어디?
이 경우는 보통 3가지 중 하나입니다:
1️⃣ Apache (웹) 쪽 병목 가능성
|
1 2 3 |
apache2 → CPU 16.6% |
👉 특징:
- 한 프로세스가 CPU 꽤 먹고 있음
- 동시 요청 많으면 지연 가능
👉 체크:
|
1 2 3 |
ps -ef | grep apache2 | wc -l |
👉 의심:
- PHP 처리 느림
- 동기 blocking 작업
