Linux CPU 사용률 100%란?
Linux Server를 운영하다 보면 갑자기 서버 응답 속도가 느려지거나 Application 접속이 지연되는 상황이 발생합니다.
이때 가장 먼저 확인하는 항목 중 하나가 CPU 사용률입니다.
대표적인 상황:
Server Response Slow↓CPU Usage 확인↓CPU 100%↓Process 분석 필요
CPU 사용률 100%는 CPU Resource를 특정 Process가 모두 사용하고 있다는 의미입니다.
하지만 CPU 사용률이 높다고 항상 문제가 되는 것은 아닙니다.
Batch 작업, 데이터 처리, 압축 작업 등 정상적인 상황에서도 CPU 사용량은 증가할 수 있습니다.
Linux CPU 구조 이해하기
CPU는 Process가 작업을 수행할 수 있도록 명령어를 처리하는 Hardware Resource입니다.
구조:
Application↓Process↓CPU Scheduler↓CPU Core
Linux Kernel은 여러 Process가 CPU를 효율적으로 사용할 수 있도록 Scheduling을 수행합니다.
CPU 사용률 확인 방법
top 명령어
Linux에서 가장 기본적인 실시간 Resource 확인 명령어입니다.
top
확인 항목:
| 항목 | 설명 |
|---|---|
| us | User Process CPU |
| sy | Kernel CPU |
| ni | Nice Process |
| id | Idle CPU |
| wa | I/O Wait |
| hi | Hardware Interrupt |
| si | Software Interrupt |
htop 명령어
top보다 보기 쉬운 Process 모니터링 도구입니다.
htop
확인 가능:
- CPU Core별 사용량
- Process 목록
- Memory 사용량
- Process 종료
ps 명령어로 CPU 높은 Process 찾기
CPU 사용량 기준 정렬:
ps aux --sort=-%cpu
결과:
USER PID CPUroot 1234 98%
가장 높은 CPU를 사용하는 Process를 확인할 수 있습니다.
CPU 사용률 100% 주요 원인
무한 Loop 발생
가장 흔한 원인 중 하나입니다.
구조:
Application 실행↓반복문 오류↓CPU 계속 사용↓100% 도달
예:
- 잘못된 while 반복문
- 종료 조건 없는 작업
- Application Bug
특정 Process 과부하
하나의 Process가 CPU를 지속적으로 사용할 수 있습니다.
확인:
top
예:
javaCPU 99%
원인:
- 비효율적인 코드
- 대량 데이터 처리
- Thread 증가
Java Application CPU 증가
Java 기반 Server에서는 CPU 문제가 자주 발생합니다.
원인:
- Garbage Collection 증가
- Thread 증가
- Memory 부족
- Infinite Loop
확인:
jstack PID
Thread 상태를 분석할 수 있습니다.
Database CPU 증가
Database Server에서도 CPU 사용량이 증가할 수 있습니다.
원인:
- 잘못된 Query
- Index 부족
- Full Table Scan
- Connection 증가
확인:
- Slow Query Log
- Query Execution Plan
Linux Kernel CPU 증가
Kernel 영역 CPU가 높다면 System 작업 문제가 있을 수 있습니다.
확인:
top
항목:
sy
증가 원인:
- Network Packet 증가
- Disk I/O 증가
- Driver 문제
CPU와 Load Average 차이
많은 사용자가 CPU 사용률과 Load Average를 혼동합니다.
CPU 사용률:
현재 CPU 사용량
Load Average:
CPU 작업 대기 상태 포함
확인:
uptime
결과:
load average: 2.0 1.5 1.0
의미:
- 1분 평균
- 5분 평균
- 15분 평균
Load Average 해석 방법
CPU Core 개수를 기준으로 판단합니다.
예:
4 Core CPU:
정상:
load average 2
주의:
load average 5 이상
CPU 처리량보다 작업 요청이 많다는 의미입니다.
CPU 사용률과 I/O Wait
CPU 사용량이 높아 보여도 실제 원인이 Disk일 수 있습니다.
확인:
top
항목:
wa
I/O Wait 증가 원인:
- Disk 성능 부족
- Storage 지연
- Network Storage 문제
CPU 과부하 분석 순서
장애 발생:
서비스 느림↓CPU 확인↓Process 확인↓Thread 분석↓Application Log 확인↓원인 해결
CPU 높은 Process 확인
PID 확인
ps aux --sort=-%cpu
상세 Process 확인
top-p PID
실행 파일 확인
ls-l /proc/PID/exe
Process 종료 방법
정상 종료 요청:
kill PID
강제 종료:
kill-9 PID
주의:
운영 Server에서는 원인 확인 후 종료하는 것이 좋습니다.
CPU Priority 조정
Linux에서는 Process 우선순위를 조절할 수 있습니다.
확인:
nice
실행:
nice -n10 command
CPU 사용 우선순위를 낮출 수 있습니다.
Docker Container CPU 과부하
Container 환경에서도 CPU 제한이 필요합니다.
구조:
Host↓Docker Container↓Application Process
현재 사용량:
docker stats
CPU 제한:
docker run --cpus="1" nginx
Kubernetes CPU Resource 관리
Kubernetes에서는 CPU Request와 Limit을 설정합니다.
구조:
Pod↓CPU Request↓CPU Limit↓Container
예:
resources: limits: cpu: "1"
Container가 과도한 CPU를 사용하는 것을 방지합니다.
CPU Monitoring 방법
운영 Server에서는 지속적인 Monitoring이 필요합니다.
확인 항목:
- CPU Usage
- Load Average
- Process 상태
- Thread 수
- Application Log
CPU 100% 예방 방법
권장:
- Application 성능 테스트
- Process Monitoring
- Resource Limit 설정
- Log 분석
- 정기적인 성능 점검
Linux CPU 장애 분석 명령어 정리
| 명령어 | 용도 |
|---|---|
| top | 실시간 CPU 확인 |
| htop | Process 분석 |
| ps | CPU 높은 Process 확인 |
| uptime | Load Average 확인 |
| pidstat | Process CPU 분석 |
| sar | System 성능 분석 |
Linux CPU 관리 Best Practice
운영 환경에서는 단순히 CPU를 줄이는 것이 아니라 원인을 분석해야 합니다.
관리 방법:
- 비정상 Process 확인
- Application 최적화
- Database Query 개선
- Container Resource 제한
- Monitoring Alert 구성
자주 묻는 질문
CPU 사용률 100%이면 서버 장애인가요?
항상 그런 것은 아닙니다.
정상적인 작업으로 CPU가 높아질 수도 있지만 지속적으로 100% 상태가 유지되면 원인 분석이 필요합니다.
CPU와 Memory 중 무엇을 먼저 확인해야 하나요?
서비스 지연 원인은 다양하기 때문에 CPU, Memory, Disk, Network를 함께 확인하는 것이 좋습니다.
Process를 바로 종료해도 되나요?
운영 서비스 Process라면 영향 범위를 확인한 후 조치해야 합니다.
마무리
Linux CPU 사용률 100% 문제는 Server 운영 환경에서 자주 발생하는 장애 유형입니다.
중요한 것은 단순히 CPU 사용량을 낮추는 것이 아니라 어떤 Process가 CPU를 사용하고 있는지 원인을 분석하는 것입니다.
| 구성 요소 | 역할 |
|---|---|
| CPU Usage | 현재 사용량 확인 |
| Process | CPU 사용 주체 |
| Load Average | 시스템 작업량 |
| top/ps | 분석 도구 |
| Resource Limit | 사용량 제어 |
Linux CPU 구조와 Process 분석 방법을 이해하면 Web Server, Docker, Kubernetes, Cloud 환경에서 발생하는 성능 문제를 빠르게 해결할 수 있습니다.