macOS 활성 상태 보기 입문
목표: 활성 상태 보기(Activity Monitor)를 열었을 때 “메모리 사용 31 GB인데 괜찮은가?”, “스왑이 7 GB면 문제인가?”, “CPU 300%는 무슨 뜻인가?”, “Reads in과 Data read는 뭐가 다른가?”에 스스로 답하기.
가상 메모리·스왑·프로세스·스레드라는 말이 낯설다면 운영체제 기초 입문의 3절(프로세스), 6절(스레드), 7절(메모리)을 먼저 읽는다. 이 노트는 그 개념이 Mac 화면에서 어떤 숫자로 보이는지를 다룬다.
한 줄로 먼저
메모리는 “Memory Used”가 아니라 “Memory Pressure” 그래프 색을 본다. CPU는 아래쪽 System/User/Idle 비율과 프로세스별 % CPU를 본다. 디스크는 “몇 번 읽고 썼나(IO 횟수)“와 “얼마나 읽고 썼나(데이터 양)“를 구분한다.
| 탭 | 제일 먼저 볼 것 | 오해하기 쉬운 것 |
|---|---|---|
| Memory | Memory Pressure 색(초록·노랑·빨강) | Memory Used가 꽉 찬 것 자체는 정상 |
| CPU | 프로세스별 % CPU, 아래쪽 Idle | % CPU는 코어 1개 = 100%라서 100%를 넘을 수 있음 |
| Disk | Data read/sec, Data written/sec | Reads in·Writes out은 횟수지 바이트가 아님 |
창 위쪽 탭은 CPU · Memory · Energy · Disk · Network이다(macOS 버전에 따라 GPU 관련 열과 Cache 탭이 더 있을 수 있다). 위쪽 표는 프로세스마다의 값, 아래쪽 패널은 컴퓨터 전체의 합계다.
0. 실제 예시: 이 Mac의 스냅숏
2026-10-11 18:52, MacBook Pro(M1 Max, RAM 32 GB, 페이지 크기 16 KiB)에서 터미널로 같은 정보를 읽은 값이다. 아래 절에서 이 숫자를 예로 쓴다.
PhysMem: 31G used (3866M wired, 14G compressor), 135M unused.
vm.swapusage: total = 8192.00M used = 7425.56M free = 766.44M (encrypted)
CPU usage: 34.8% user, 26.69% sys, 39.21% idle
Processes: 879 total, 12 running, 1 stuck, 866 sleeping, 9522 threads
Load Avg: 59.88, 49.47, 38.16
Disks: 109216367/2011G read, 32345218/394G written.같은 내용을 직접 보려면 top -l 1 -n 0 | head -12, vm_stat, sysctl vm.swapusage, memory_pressure를 쓴다(12절).
1. Memory 탭: 아래쪽 패널
한눈에 보는 구조
Physical Memory (설치된 RAM, 예: 32 GB)
├─ Memory Used ─┬─ App Memory 앱이 직접 만든 데이터
│ ├─ Wired Memory OS가 RAM에 박아 둔 것
│ └─ Compressed 압축해서 RAM에 넣어 둔 것
├─ Cached Files 다시 열 때 빠르라고 남겨 둔 파일 내용
└─ (진짜 빈 공간) 보통 거의 0
Swap Used (RAM 밖, SSD 위) RAM이 모자라 디스크로 내보낸 것macOS는 남는 RAM을 놀리지 않는다. 빈 공간이 있으면 파일 캐시로 채운다. 그래서 Physical Memory와 Memory Used + Cached Files가 거의 같고, “빈 메모리”는 늘 작다. 이것은 정상이다.
Memory Pressure (메모리 압력)
메모리가 지금 일을 얼마나 여유 있게 받쳐 주는지를 그래프로 보여 준다. Apple은 이 값이 빈 메모리 양, 스왑 속도, wired 메모리, 파일 캐시 메모리로 정해진다고 설명한다. 그래서 단순한 “사용률”이 아니다.
| 색 | Apple 설명 | 실제로 하는 일 |
|---|---|---|
| 초록 | RAM을 효율적으로 쓰고 있음 | 캐시를 비우는 정도로 충분함 |
| 노랑 | 언젠가 RAM이 더 필요할 수 있음 | 압축을 많이 하기 시작함 |
| 빨강 | RAM이 더 필요함 | 스왑을 활발히 써서 느려짐 |
노랑·빨강이 오래 가거나 튀면, 위쪽 표를 Memory 열로 정렬해 원인 앱을 찾는다. 잠깐 노랑이 됐다가 돌아오는 정도는 걱정하지 않아도 된다.
비유 하나: 메모리 압력은 책상 위가 얼마나 꽉 찼는지가 아니라, 일하다 서랍(스왑)을 몇 번 열었는지다. 책상이 꽉 차 있어도 서랍을 안 열면 일은 빠르다.
Physical Memory (물리적 메모리)
설치된 RAM 총량이다. 바뀌지 않는다. Apple Silicon Mac은 이 RAM을 CPU와 GPU가 같이 쓴다(통합 메모리). 그래서 GPU를 많이 쓰는 작업도 이 숫자에서 나간다.
Memory Used (사용된 메모리)
지금 쓰고 있는 RAM이다. 바로 아래 세 칸의 합에 가깝다.
Memory Used ≈ App Memory + Wired Memory + Compressed
Cached Files는 Memory Used에 들어가지 않는다. 필요하면 바로 비울 수 있는 공간이기 때문이다.
예시 Mac: 9.2 GiB(App) + 3.8 GiB(Wired) + 14.2 GiB(Compressed) ≈ 27 GiB.
App Memory (앱 메모리)
앱이 실행 중에 만든 데이터가 차지하는 RAM이다. 열린 탭, 불러온 이미지, Python의 배열과 텐서가 여기 들어간다. 디스크에 원본 파일이 없는 메모리라서 익명(anonymous) 메모리라고도 한다. 그래서 RAM이 모자라면 버릴 수 없고, 압축하거나 스왑으로 보내야 한다.
Wired Memory (와이어드 메모리, 고정 메모리)
OS가 동작하는 데 꼭 필요해서 반드시 RAM에 붙어 있어야 하는 메모리다. 압축도 스왑도 안 된다. 커널 자체, 커널이 쓰는 자료 구조, 드라이버 버퍼가 여기 들어간다. 이 양만큼은 다른 앱이 절대 쓸 수 없다. 보통 몇 GB이고, 앱을 많이 띄우면 조금 는다.
Compressed (압축됨)
RAM 공간을 더 만들려고 압축해서 RAM 안에 둔 메모리 양이다. 압축 후 크기를 보여 준다.
macOS는 RAM이 모자라면 오래 안 쓴 App Memory를 먼저 압축한다. 압축은 CPU를 조금 쓰지만 SSD에 쓰는 스왑보다 훨씬 빠르다. 그래서 macOS의 순서는 이렇다.
RAM이 모자람
→ 1) Cached Files 비우기 (거의 공짜)
→ 2) 오래 안 쓴 App Memory 압축 (CPU 조금)
→ 3) 압축된 것도 스왑 파일로 내보내기 (SSD, 느림)예시 Mac에서는 원래 41.9 GiB였던 데이터가 14.2 GiB로 압축돼 있었다(약 2.9배). Compressed가 크다는 것은 RAM이 빠듯해서 압축기가 열심히 일하고 있다는 뜻이다.
위쪽 표의 Compressed Memory 열(Columns 메뉴에서 켬)을 보면 앱별로 얼마나 압축됐는지 알 수 있다.
Cached Files (캐시된 파일)
최근에 읽은 파일 내용을 남는 RAM에 그대로 둔 것이다. 앱을 껐다 다시 켜거나 같은 데이터셋을 다시 읽으면 SSD 대신 RAM에서 읽어서 빠르다.
다른 앱이 메모리를 원하면 바로 버린다. 원본이 디스크에 있으니 지워도 잃는 것이 없다. 그래서 Cached Files가 크다는 것은 문제가 아니라 RAM을 잘 쓰고 있다는 뜻이다. 예전 macOS에서는 이 칸 이름이 “File Cache”였다.
Swap Used (사용된 스왑)
RAM이 모자라 시동 디스크(SSD)로 내보낸 메모리 양이다. 실제 파일은 /System/Volumes/VM/swapfile0, swapfile1, … 이고 필요할 때 1 GB씩 늘어나며 암호화돼 있다.
- 스왑이 있다는 것 자체는 문제가 아니다. 며칠 켜 둔 Mac은 몇 GB 정도 스왑을 가진 경우가 흔하다. 오래 안 쓴 것을 치워 둔 것뿐이다.
- 문제는 지금 활발히 들락거릴 때다. 그때 메모리 압력이 노랑·빨강이 되고, 앱 전환이 버벅인다.
- 예시 Mac은 7.25 GiB를 스왑에 쓰고 있었다. 압축 14 GiB와 함께 보면 32 GB RAM이 빠듯한 상태다.
2. Memory 탭: 위쪽 표의 열
| 열 | 뜻 |
|---|---|
| Memory | 이 프로세스가 차지한 메모리. 다른 프로세스와 같이 쓰는 부분은 정확히 나눠 세기 어려워서, 합계가 아래쪽 Memory Used와 딱 맞지 않는다 |
| Compressed Memory | 이 프로세스의 메모리 중 압축된 양 |
| Threads | 이 프로세스 안의 스레드 수 |
| Ports | 이 프로세스가 가진 Mach 포트 수. macOS에서 프로세스끼리 메시지를 주고받는 창구다. 계속 늘기만 하면 누수 의심 |
| PID | 프로세스 번호 |
| User | 프로세스 주인. 내 계정, root, _ 로 시작하는 시스템 계정 등 |
“Google Chrome Helper (Renderer)“처럼 이름이 같은 줄이 여러 개 보이는 것은 앱이 탭이나 기능마다 프로세스를 따로 띄우기 때문이다. 앱 하나의 실제 사용량은 이 줄들을 합쳐야 한다. View > All Processes, Hierarchically를 고르면 부모·자식 관계로 묶어 보여 준다.
3. CPU 탭: 아래쪽 패널
System, User, Idle
세 값은 CPU 전체 능력 중 몇 %가 어디에 쓰였는지다. 합하면 100%다.
| 항목 | Apple 설명 | 예시 |
|---|---|---|
| System | macOS에 속한 프로세스가 쓰는 비율 | 커널, WindowServer, kernel_task, Spotlight 색인 |
| User | 내가 연 앱과 그 앱이 띄운 프로세스가 쓰는 비율 | 브라우저, Python, 터미널 |
| Idle | 아무도 안 쓰는 비율 |
예시 Mac은 User 34.8%, System 26.69%, Idle 39.21%였다. System이 이렇게 높으면 압축·스왑, 파일 색인, 많은 프로세스 전환처럼 OS가 대신 해 주는 일이 많다는 뜻이다. 메모리 압력과 같이 보면 원인을 좁힐 수 있다.
CPU Load 그래프
System(빨강)과 User(파랑)를 쌓아서 시간에 따라 그린다. 코어별로 따로 보려면 Window > CPU History를 연다.
Threads, Processes
- Processes(프로세스): 지금 떠 있는 프로세스 수. 실행 중인 프로그램 하나하나다.
- Threads(스레드): 그 프로세스들 안에 있는 스레드를 전부 더한 수. 스레드는 한 프로세스 안에서 메모리를 같이 쓰며 동시에 도는 실행 흐름이다.
예시 Mac은 프로세스 879개, 스레드 9,522개였다. 수백·수천 개는 정상이다. 대부분은 잠들어(sleeping) 있고, 실제로 CPU를 쓰는 것은 그중 몇 개뿐이다. 이 숫자 자체보다 특정 프로세스의 스레드 수가 계속 늘기만 하는지가 더 의미 있다.
4. CPU 탭: 위쪽 표의 열
| 열 | 뜻 |
|---|---|
| % CPU | 이 프로세스가 쓰는 CPU. 코어 1개를 꽉 쓰면 100% 다. 코어가 10개면 최대 1000% |
| CPU Time | 이 프로세스가 시작된 뒤 CPU를 실제로 쓴 시간의 합 |
| Threads | 스레드 수 |
| Idle Wake Ups | CPU가 쉬고 있을 때 이 프로세스가 CPU를 깨운 횟수. 많으면 배터리를 갉아먹는다 |
| Kind | Apple(Apple Silicon 네이티브)인지 Intel(Rosetta 2 번역)인지 |
| % GPU, GPU Time | GPU 사용 비율과 누적 시간(macOS 버전에 따라 있음) |
| User | 프로세스 주인 |
python train.py가 % CPU 800%로 보인다면 코어 약 8개를 꽉 쓰고 있다는 뜻이다. 100%에서 멈춰 있다면 코어 하나만 쓰고 있다는 뜻이고, Python의 GIL이나 단일 스레드 코드가 원인일 수 있다(운영체제 기초 입문 6절).
kernel_task가 CPU를 많이 쓸 때
kernel_task는 커널 자체다. Mac이 뜨거워지면 일부러 CPU 시간을 차지해서 다른 프로세스가 CPU를 덜 쓰게 만든다. 열을 식히려는 동작이라 끄면 안 되고, 끌 수도 없다.
5. Disk 탭: 아래쪽 패널
디스크 숫자는 횟수와 양 두 종류다.
| 항목 | 종류 | 뜻 |
|---|---|---|
| Reads in | 횟수 | 부팅 뒤 저장장치에서 읽기를 한 총 횟수 |
| Writes out | 횟수 | 부팅 뒤 저장장치에 쓰기를 한 총 횟수 |
| Reads in/sec | 횟수 속도 | 초당 읽기 횟수 (IOPS) |
| Writes out/sec | 횟수 속도 | 초당 쓰기 횟수 (IOPS) |
| Data read | 양 | 부팅 뒤 읽은 데이터 총량 |
| Data written | 양 | 부팅 뒤 쓴 데이터 총량 |
| Data read/sec | 양 속도 | 초당 읽는 양 (MB/s) |
| Data written/sec | 양 속도 | 초당 쓰는 양 (MB/s) |
IO(input/output)는 디스크에 한 번 “이만큼 읽어 줘/써 줘”라고 요청하는 단위다. IOPS는 초당 그 요청 횟수다.
비유 하나: 이삿짐 트럭이다. Reads in·Writes out은 트럭이 몇 번 왕복했나, Data read·Data written은 짐을 몇 톤 옮겼나다. 작은 파일 수만 개를 읽으면 왕복은 많고 짐은 적다. 큰 동영상 하나를 읽으면 왕복은 적고 짐은 많다.
예시 Mac은 부팅 뒤 읽기 약 1억 922만 번에 2011 GB, 쓰기 약 3235만 번에 394 GB였다. 스왑을 쓰면 Data written이 함께 늘어난다.
그래프
아래쪽 그래프는 IO(횟수)와 Data(양) 중 하나를 골라 볼 수 있다. 읽기는 파랑, 쓰기는 빨강이다. View > Dock Icon > Show Disk Activity를 고르면 Dock 아이콘에 같은 그래프가 나온다.
6. Disk 탭: 위쪽 표의 열
| 열 | 뜻 |
|---|---|
| Bytes Written | 이 프로세스가 저장장치에 쓴 총 바이트 |
| Bytes Read | 이 프로세스가 저장장치에서 읽은 총 바이트 |
| Kind, PID, User | CPU 탭과 같음 |
kernel_task의 Bytes Written이 크면 스왑을 많이 쓰고 있을 가능성이 크다. mds, mds_stores, mdworker는 Spotlight 색인이다. 큰 폴더를 새로 만들었거나 대량으로 풀었을 때 잠깐 디스크를 많이 쓴다. 학습 데이터 폴더처럼 검색할 필요가 없는 곳은 시스템 설정 > Spotlight에서 제외할 수 있다.
7. Energy 탭과 Network 탭 (짧게)
Energy
- Energy Impact: 이 프로세스가 지금 쓰는 전력의 상대 크기. 단위가 없고, 프로세스끼리 비교하는 용도다.
- 12 hr Power: 지난 12시간 평균. 배터리를 오래 갉아먹은 앱을 찾을 때 본다.
- App Nap: 안 보이는 창의 앱을 OS가 재워 두고 있는지.
- Preventing Sleep: 이 앱 때문에 Mac이 잠자기에 못 들어가는지.
Network: Disk 탭과 같은 구조다. Packets in/out은 횟수, Data received/sent는 양이다.
8. 상황별로 무엇을 볼까
| 증상 | 볼 곳 | 해석 |
|---|---|---|
| Mac 전체가 버벅임 | Memory Pressure 색 | 노랑·빨강이면 메모리가 원인. 초록이면 CPU나 디스크 쪽 |
| 팬이 돌고 뜨거움 | CPU 탭, % CPU로 정렬 | 100% 이상 계속 쓰는 프로세스 찾기 |
| 앱 전환이 느림 | Swap Used가 빠르게 늘어나는지 | 활발한 스왑. 큰 앱을 닫거나 탭을 줄임 |
| 배터리가 빨리 닳음 | Energy 탭 12 hr Power, Idle Wake Ups | 뒤에서 계속 깨어나는 앱 |
| 디스크 공간이 갑자기 줄어듦 | Disk 탭 Bytes Written | 로그나 캐시를 계속 쓰는 프로세스 |
| Python 학습이 느림 | % CPU가 100%에 붙어 있는지 | 코어 하나만 쓰는 중. 데이터 로더 병렬화 확인 |
9. 메모리 칸과 vm_stat의 대응
Apple이 계산식을 공개하지는 않았다. 다만 vm_stat 값으로 대략 이렇게 맞춰 볼 수 있다. 각 값에 페이지 크기(Apple Silicon 16 KiB, sysctl hw.pagesize)를 곱한다.
| 활성 상태 보기 | vm_stat 근사 |
|---|---|
| App Memory | Anonymous pages − Pages purgeable |
| Wired Memory | Pages wired down |
| Compressed | Pages occupied by compressor |
| Cached Files | File-backed pages + Pages purgeable |
| (압축 전 원래 크기) | Pages stored in compressor |
purgeable은 앱이 “필요하면 지워도 된다”고 표시해 둔 메모리다. 그래서 App이 아니라 Cached Files 쪽에 넣는다.
예시 Mac에서 계산하면 App 9.2 + Wired 3.8 + Compressed 14.2 ≈ 27.2 GiB이고, Cached Files 4.1 GiB를 더하면 약 31.3 GiB로 top의 31G used와 맞는다.
10. 아주 짧은 암기
- 메모리는 Used가 아니라 Pressure 색을 본다. 초록이면 꽉 차 보여도 괜찮다.
- Used ≈ App + Wired + Compressed. Cached Files는 빠진다.
- Wired는 못 빼는 것, Cached Files는 언제든 버리는 것.
- macOS 순서: 캐시 비우기 → 압축 → 스왑.
- 스왑이 있는 건 괜찮고, 활발히 늘어나는 게 문제.
- System = macOS가 쓴 CPU, User = 내 앱이 쓴 CPU, Idle = 쉬는 CPU.
% CPU100% = 코어 1개. 넘을 수 있다.- Reads in·Writes out은 횟수, Data read·Data written은 양.
입문자가 조심할 점
- “메모리 정리” 앱을 쓰지 않는다. Cached Files를 억지로 비우면 다시 읽느라 오히려 느려진다.
kernel_task,WindowServer를 강제 종료하지 않는다. 강제 종료가 안 되거나, 되더라도 로그아웃·재시동이 된다.- Force Quit(강제 종료)는 마지막 수단이다. 그냥 Quit은 안전할 때 끝내고, Force Quit은 즉시 끝내서 저장 안 된 데이터를 잃을 수 있다.
- 위쪽 표 Memory 열을 다 더해도 Memory Used와 안 맞는다. 공유 메모리를 어떻게 나누느냐의 차이라서 정상이다.
- RAM 증설 판단은 며칠 동안의 Memory Pressure로 한다. 한순간의 Swap Used 숫자로 하지 않는다.
11. 터미널에서 같은 정보 보기
memory_pressure # 메모리 압력과 free 비율
vm_stat # 페이지 단위 메모리 통계 (9절)
sysctl vm.swapusage # 스왑 총량·사용량
sysctl hw.memsize hw.pagesize # RAM 크기(바이트), 페이지 크기
top -l 1 -n 0 | head -12 # CPU·메모리·디스크·네트워크 요약 한 번
top -o cpu # CPU 많이 쓰는 순 (q로 종료)
ps -ax -o pid,%cpu,rss,comm | sort -k2 -nr | head # CPU 상위 프로세스
iostat -w 1 # 디스크 초당 처리량
ls -lh /System/Volumes/VM # 실제 스왑 파일들top의 Load Avg는 실행 중이거나 CPU 차례를 기다리는 일의 평균 개수다. 코어 수(예시 Mac은 10개)보다 크면 CPU를 기다리는 일이 줄 서 있다는 뜻이다. 활성 상태 보기 창에는 이 값이 나오지 않는다.
관련 노트: 운영체제 기초 입문, 컴퓨터 기본 도구와 개발 환경 입문, GPU와 CUDA 입문, TRM mac에서 학습시켜보기 프로젝트 for ARC-AGI
출처
- Apple, Activity Monitor User Guide — View memory usage. https://support.apple.com/guide/activity-monitor/view-memory-usage-actmntr1004/mac
- Apple, Activity Monitor User Guide — View CPU activity. https://support.apple.com/guide/activity-monitor/actmntr43452
- Apple, Activity Monitor User Guide — View disk activity. https://support.apple.com/guide/activity-monitor/actmntr1005
- Apple, Activity Monitor User Guide — Check if your Mac needs more RAM. https://support.apple.com/guide/activity-monitor/actmntr34865
- Apple, Activity Monitor Help (OS X 10.10) — Memory. https://help.apple.com/activitymonitor/mac/10.10/en.lproj/actmntr1004.html
- Other World Computing, “Using Activity Monitor, Part 2: Energy, Disk, and Network”. https://eshop.macsales.com/blog/58337-using-activity-monitor-part-2-energy-disk-and-network/
- macOS man pages:
vm_stat(1),top(1),memory_pressure(1),iostat(8),sysctl(8)