프로그램을 작성하고 그 프로그램이 좋은 프로그램인지 아닌지를 보는 여러 기준이 있을 것입니다.
CPU 관련해서는 CPU utilization, CPU load 이 두 가지 기준을 한번 생각해 보겠습니다.
CPU Utilization
utilization 특정 시점에 CPU 처리 용량(capacity) 대비 CPU가 얼마나 사용되고 있는지를 의미합니다.
의미 있는 작업만을 포함하는 것이 아니라, 의미 없이 busy waiting 하는 경우도 모두 계산됩니다.
CPU utilization = 100% - "CPU idle 비율"
예: idle = 90% → utilization = 10%
전체 CPU 숫자(= core 숫자) 기준인지 CPU 1개 기준인지 구분해야 합니다.
- Linux의 경우 CPU 1개 기준 숫자입니다. 즉, 100%가 최대가 아니라 100% × core 수가 최대입니다.
(예: 4 vCPU → 400%가 최대치)
utilization 관련 linux 명령어 정리
top
mpstat
mpstat -P
ps
ps -u
ps -o pcpu,pid,user,args -u$USER
htop
1. top: 시스템의 현재 상태를 실시간으로 보여주는 도구입니다. CPU 사용률, 메모리 사용, 프로세스 관리 등 시스템의 다양한 정보를 한눈에 볼 수 있습니다. 'top' 명령어는 CPU 사용량이 높은 프로세스부터 나열하며, 사용자는 이 정보를 통해 시스템 성능을 모니터링하고 문제를 진단할 수 있습니다.
2. mpstat: CPU 사용량을 각 CPU 코어별로 보여줍니다. 시스템의 CPU 부하를 분석할 때 유용하며, 각 CPU 코어의 성능 및 사용률을 파악하는 데 도움이 됩니다.
3. mpstat -P: 'mpstat'의 확장 버전으로, 특정 CPU 코어나 모든 코어의 세부적인 통계를 보여줍니다. '-P' 옵션 뒤에 특정 코어 번호를 지정하면 그 코어에 대한 정보만 표시합니다. 예를 들어, `mpstat -P ALL`은 모든 코어의 정보를 보여줍니다.
4. ps: 현재 실행 중인 프로세스에 대한 정보를 보여줍니다. 프로세스 ID, 실행 중인 커맨드, 사용자 이름, CPU 사용량 등 다양한 정보를 확인할 수 있습니다.
5. ps -u: 특정 사용자의 프로세스 정보를 보여줍니다. 사용자 이름을 지정하면 해당 사용자가 실행 중인 프로세스의 정보를 볼 수 있습니다.
6. ps -o pcpu, pid, user, args -u$USER: 특정 사용자('$USER')의 프로세스에 대해 CPU 사용률('pcpu'), 프로세스 ID('pid'), 사용자 이름('user'), 실행 커맨드('args')를 보여줍니다. 이 옵션을 통해 특정 사용자의 프로세스 중 어떤 것이 가장 많은 CPU 자원을 사용하는지 파악할 수 있습니다.
7. htop: 'htop' 명령어는 'top'과 유사하지만, 더 직관적인 사용자 인터페이스와 추가 기능을 제공합니다. 사용자는 프로세스를 직접 선택하고, 필요에 따라 종료하거나 우선순위를 변경하는 등의 작업을 수행할 수 있습니다. 또한, 시스템의 CPU, 메모리, 스왑 사용량 등을 그래픽으로 표시해 줍니다.
CPU Load
CPU load는 특정 시점에 CPU를 사용하거나 기다리고 있는 프로세스 수입니다.
CPU utilization은 CPU가 놀고 있는지 아닌지를 보는 것입니다. 그래서 뒤에 얼마나 기다리고 있는지는 모릅니다.
그저 CPU가 사용되고 있어라는 의미입니다.
CPU load는 뒤에 얼마나 기다리고 있는지까지 포함을 합니다.
특정 시점을 보는 것은 의미가 없어서 평균치로 계산을 합니다.
최근 1분, 최근 5분, 최근 15분 이것을 봅니다.
만약 CPU load가 1이면 CPU를 지금 쓰거나 기다리고 있는 프로세스가 1이라는 뜻입니다.
CPU가 4개면 최고 4개까지 쓰거나 기다릴 수 있는 것입니다.
- CPU load 수치 ≤ CPU 개수 (예: 4 vCPU인데 CPU load가 1.0)
→ 모든 프로세스가 CPU를 바로바로 할당받고 있음 - CPU load 수치 > CPU 개수 (예: 4 vCPU인데 CPU load가 5.0)
→ CPU를 바로 할당받지 못하고 잠깐 대기하는 프로세스들이 있음
CPU Load가 높을 때 증상
- 실행 중인 모든 프로세스의 반응이 느립니다.
- 프로세스를 시작할 때 바로 뜨지 않고 약간의 시차가 발생합니다.
- 과열되어서 OS가 리부팅되기도 합니다.
CPU Load 관련 linux 명령어
w
uptime
top
htop
1. w: 현재 시스템에 로그인한 사용자들의 정보를 보여줍니다. 사용자의 이름, 로그인 시간, 현재 작업 중인 작업, 시스템 부하 등을 포함하여 시스템 사용에 대한 개요를 제공합니다. 이를 통해 관리자는 시스템에 어떤 사용자들이 활동하고 있는지, 그리고 그들이 어떤 작업을 수행하고 있는지 알 수 있습니다.
2. uptime: 'uptime' 명령어는 시스템이 마지막으로 재부팅된 이후로 얼마나 오랫동안 작동하고 있는지를 보여줍니다. 이 명령어는 현재 시간, 시스템이 작동한 시간, 로그인한 사용자 수, 그리고 평균 부하 지수를 포함합니다. 평균 부하 지수는 1분, 5분, 15분 동안의 평균 CPU 및 디스크 활동을 나타내는 지표입니다. 이 명령어는 시스템의 안정성과 부하를 빠르게 확인하는 데 유용합니다.
CPU utilization과 CPU load와의 관계
utilization은 현재 CPU 사용 여부만 감안하고, load는 그것 외에 대기 여부까지 감안합니다.
1개 CPU 기준으로 설명하면
- load가 1 이하일 때 → utilization은 100% 이하
- load가 1 초과일 때 → utilization은 거의 항상 100%
따라서 utilization만으로는 파악이 어렵고 load를 같이 고려해야 합니다.
예: CPU가 100%인데 load가 1.0일 때와 load가 10.0일 때
서버 운영할 때의 가이드라인
대개 1개 CPU 기준으로 50%~70% 정도의 utilization을 목표로 합니다.
load로는 대략 0.5~0.7 정도가 됩니다.
만약 4 vCPU의 경우는 4배 곱해서 utilization 200%~280%, load 2.0~2.8이 됩니다.
'CS' 카테고리의 다른 글
[OS] Multi-processing, Multi-threading (0) | 2023.12.10 |
---|---|
[OS] Multi-Programming, Multi-Tasking (0) | 2023.12.10 |
[Network] Socket Options, I/O Multiplexing과 Non-blocking I/O (1) | 2023.10.23 |
[Network] TCP Socket Programming - 데이터 수신하기 (1) | 2023.10.22 |
[Network] TCP Socket Programming - 데이터 전송하기 (1) | 2023.10.22 |