먼저 읽는 요약
- 쓰는 이유 — 로컬 LLM을 돌릴 때 GPU·메모리 압력·스왑·온도를 메뉴 막대에서 바로 확인합니다.
- 먼저 볼 수치 — RAM이 몇 GB 찼는지보다 메모리 압력과 스왑이 늘어나는 흐름을 함께 봅니다.
- 설치 — 무료 오픈소스 앱이며 macOS 12 Monterey 이상 정식 버전을 지원합니다. GitHub 또는 Homebrew로 설치할 수 있습니다.
- 알아둘 한계 — 성능을 높이거나 모델을 대신 관리하는 앱은 아닙니다. 팬 제어는 유지 관리되지 않는 기능이므로 저는 관찰 위주로 사용합니다.
Stats가 필요한 순간: 로컬 모델을 올리면 맥북이 달라집니다
브라우저를 열고 문서를 쓰는 정도라면 최신 Mac의 자원 상태를 매번 들여다보지 않아도 지낼 만합니다. 느려지면 쓰지 않는 앱을 닫고, 나머지는 운영체제에 맡기면 됩니다. 하지만 외계 기술을 주워다 넣은 것 같은 M5 Pro도 로컬 LLM을 돌리기 시작하면 이야기가 달라집니다.
모델을 불러오면 메모리 수십 GB가 차고, 추론을 시작하면 GPU 사용률과 온도가 빠르게 올라갑니다. 긴 컨텍스트와 KV 캐시가 메모리를 더 사용하면서 여유가 줄고 스왑이 늘기도 합니다. 상황에 따라 모델을 언로드하거나 컨텍스트 크기를 줄여야 합니다. 평소 얌전하던 맥북이 소형 데이터센터 흉내를 내기 시작하면, 벤치마크 점수보다 지금 무슨 일이 벌어지는지 보여주는 계기판이 절실해집니다.
그래서 저는 Stats를 필수 앱처럼 사용합니다. CPU·GPU·메모리부터 온도와 배터리까지 macOS 메뉴 막대에서 실시간으로 확인하는 무료 오픈소스 시스템 모니터입니다. Apple Silicon과 Intel Mac에서 사용할 수 있습니다.

제 메뉴 막대에는 CPU, GPU, RAM, 온도와 배터리를 모두 올려두었습니다. 조금 관제실 같아지지만 로컬 LLM에 빠진 사람의 맥북으로서는 자연스럽습니다. 화면 오른쪽 위를 한 번 보는 것만으로 상태를 파악하는 편리함은 모델을 하루 종일 올렸다 내리는 사람에게 꽤 중요합니다.
| 확인할 항목 | 제가 보는 내용 |
|---|---|
| CPU·GPU | 사용률, CPU 사용량이 높은 프로세스, 연산이 움직이는 흐름 |
| 메모리 | RAM 사용량, 메모리 압력, 스왑 변화 |
| 센서 | CPU·GPU·SSD 등의 온도, 전압·소비전력, 팬 속도 |
| 그 밖의 모듈 | 디스크 용량·읽기/쓰기, 네트워크 속도, 배터리 상태, 블루투스 배터리, 여러 시간대의 시계 |
처음 설치하고 필요한 정보만 남기는 방법
Stats 공식 GitHub에서 최신 Stats.dmg를 내려받아 열고 앱을 응용 프로그램 폴더로 옮기면 됩니다. 공식 지원 범위는 macOS 12 Monterey 이상 정식 버전이며 macOS 베타는 지원 대상이 아닙니다.

Homebrew를 이미 사용한다면 터미널에 아래 명령을 입력합니다. 공식 안내에 나온 명령 그대로입니다.
brew install stats
brew install은 Homebrew로 프로그램을 설치한다는 뜻이고 stats는 패키지 이름입니다. 다른 일반 macOS 앱에서는 --cask를 쓰기도 하지만, Stats 공식 안내는 위 명령을 제시합니다.
설치 후에는 로그인할 때 자동 실행되도록 설정해두는 편이 좋습니다. 상태를 볼 때마다 Stats부터 켜야 한다면 상시 모니터링의 장점이 줄어듭니다. 모듈별로 원하는 정보와 표시 형태를 선택할 수 있으므로 처음부터 모든 숫자를 채울 필요는 없습니다.

숫자·그래프·원형 차트·막대 등 표시 형태를 고르고, 항목을 클릭하면 자세한 팝업과 CPU·RAM을 많이 쓰는 프로세스를 볼 수 있습니다. 공간이 부족하다면 메모리 압력과 온도처럼 중요한 항목만 남기면 됩니다. 아이콘 순서는 macOS가 관리하므로 Command 키를 누른 채 좌우로 드래그해 바꿉니다.
macOS 26 Tahoe에서 앱은 실행됐는데 아이콘이 보이지 않는다면 시스템 설정 → 메뉴 막대 → Stats 허용을 확인합니다. 모듈과 위젯을 켰는지도 함께 봅니다. 공식 FAQ에도 안내된 항목이므로 재설치하기 전에 살펴볼 만합니다.
RunCat·활성 상태 보기와 함께 쓰는 이유
맥 기본 앱인 활성 상태 보기도 훌륭합니다. CPU를 많이 쓰는 프로세스, RAM, 메모리 압력과 GPU 기록을 자세히 확인할 수 있고 저도 자주 사용합니다. 다만 확인할 때마다 앱을 열어야 합니다. 메모리 압력 색을 보는 것은 괜찮아도 CPU·GPU 온도까지 즉시 확인하기는 번거롭습니다.

평소에는 RunCat도 함께 씁니다. 달리는 캐릭터가 CPU 사용량을 직관적으로 보여주므로 맥이 얼마나 바쁘게 일하는지 빠르게 알 수 있습니다. RunCat이 상태를 알려주는 신호등이라면 Stats는 각 부품의 수치를 보여주는 계기판에 가깝습니다.
둘 중 하나를 고를 필요는 없습니다. 일상적인 부하는 RunCat의 달리기 속도로 보고, 로컬 LLM이나 Blender 같은 무거운 작업에서는 Stats의 GPU·RAM·온도를 봅니다. 고양이가 상황을 알려주면 Stats가 현장을 숫자로 보여주는 식입니다.
GPU가 움직이는지, 메모리가 버티는지 확인합니다
로컬 LLM에서 먼저 보는 것은 실제로 연산 중인지 알려주는 GPU 사용률입니다. 프롬프트를 보냈을 때 수치가 올라가면 추론이 움직인다는 단서가 됩니다. 글자 생성이 멈춘 것처럼 보이고 GPU도 낮다면 대기 중이거나 다른 병목이 생겼을 가능성을 생각합니다.


물론 CPU 작업·메모리 부족·디스크 접근·앱 문제도 있으므로 GPU 수치 하나로 원인을 확정하지는 않습니다. 그래프는 진단서보다 맥박계에 가깝습니다. Qwen 같은 35B 모델을 쓸 때 GPU가 높은 상태로 오래 머물면 모델이 멈췄는지, 아직 묵묵히 계산 중인지 어느 정도 구분하는 데 도움이 됩니다.

로그는 작업 단계를, Stats는 실제 자원 변화를 보여줍니다. 모델이 입을 다문 동안 맥북 안에서 무엇을 하는지 양쪽에서 살펴보는 셈입니다.
그다음은 RAM입니다. Apple Silicon은 CPU와 GPU가 통합 메모리를 공유하고 MLX도 이 구조를 활용합니다. 맥에서도 꽤 큰 모델을 GPU로 실행할 수 있지만, 모델·macOS·다른 앱의 메모리가 완전히 따로 떨어져 있는 것은 아닙니다.

모델에 긴 컨텍스트와 KV 캐시가 붙고 브라우저·개발 서버·LM Studio·코딩 에이전트까지 켜면 48GB도 무한한 우주가 아니라는 사실을 금방 깨닫습니다. 그렇다고 48GB 중 40GB를 사용한다는 숫자만으로 위험하다고 판단하지는 않습니다.

macOS는 남는 RAM을 캐시로 활용하므로 높은 사용률만으로 메모리 부족을 단정할 수 없습니다. 더 중요하게 보는 것은 메모리 압력과 스왑 사용량입니다. 압력은 여유 메모리·스왑 활동·와이어드 메모리·파일 캐시 등을 종합한 지표입니다. 녹색은 효율적으로 처리하는 상태, 노란색은 자원이 부족해질 가능성이 있는 상태, 빨간색은 더 많은 메모리가 필요한 상태를 뜻합니다.
- 압력이 녹색을 유지하는지, 스왑이 빠르게 증가하는지 봅니다.
- 모델을 사용하지 않을 때 메모리가 반환되는지 확인합니다.
- 컨텍스트가 길어질수록 사용량이 계속 커지는지, 다른 앱을 함께 쓸 여유가 있는지 봅니다.
압력과 스왑이 함께 오르면 사용하지 않는 앱부터 닫습니다. 그래도 부족하면 모델을 언로드하거나 컨텍스트를 줄입니다. Stats가 대신 관리하지는 않지만 메모리가 한계로 다가가는 과정을 미리 보여줍니다. 숫자를 지켜보는 일까지 즐거워졌다면 이미 이 취미에 꽤 깊이 들어온 셈입니다.
온도를 챙기게 된 과열 보호 잠자기 경험
짧은 질문과 달리 수천 페이지 문서를 구조화하거나 여러 글을 연속 분석하면 CPU·GPU를 오래 사용합니다. 최근에는 Codex에게 맡기기 아쉬운 대규모 반복 작업을 로컬 모델에 조금씩 넘기고 있습니다. 사용량 제한을 불평하지 않는 대신 맥북이 열로 의사를 표현합니다.


Mac은 센서와 팬으로 열을 관리하고, 과열 조건에서는 kernel_task가 다른 프로세스의 CPU 사용을 제한하기도 합니다. 높은 온도가 이어지면 팬 회전수나 성능도 달라질 수 있습니다. 다만 센서 이름을 특정 코어 하나의 정확한 온도로 해석하지는 않습니다. 공식 설명에 따르면 CPU·GPU의 열 구역을 가리키는 값이며 새 칩에서는 센서 대응도 달라질 수 있습니다.
- 평소보다 전체 온도가 얼마나 올랐는지 봅니다.
- 높은 온도가 얼마나 오래 이어지는지 봅니다.
- 팬 속도와 성능 변화가 함께 나타나는지 봅니다.
이것을 가볍게 볼 수 없게 만든 경험이 있습니다. 퇴근 후 로컬 모델에 문서 분석을 맡긴 지 약 20분쯤 됐을 때, 맥북을 1분 정도 덮고 관사로 올라왔습니다. Thermal Emergency Sleep이 발생했고 이후 약 3~4분 동안 제대로 반응하지 않아 결국 강제로 종료했습니다. 상당히 무서운 경험이었습니다.


당시에는 Qwen 35B 분석으로 열이 오른 상태에서 클램셸 관련 앱이 외부 모니터와 잠자기 방지를 유지하고 있었습니다. macOS 과열 보호가 작동하면서 잠들고 깨는 과정이 반복됐을 것으로 추정했습니다. 그날 이후에는 온도와 작업 상태를 확인하고 모델을 멈추거나 언로드한 다음 이동합니다.
팬 제어와 메뉴 막대 공간은 한계를 알고 씁니다
팬 속도를 직접 바꾸는 기능도 있지만 개발자는 이를 레거시 기능으로 분류하며 업데이트나 버그 수정을 제공하지 않는다고 안내합니다. 저는 팬을 상시 조작하기보다 온도와 회전수를 관찰하는 용도로 씁니다. 평소 냉각 관리는 맥에 맡깁니다.
아주 뜨거울 때 팬을 100%로 올리고 손바닥으로 뜨거운 바람을 느껴본 적은 있습니다. 고전적인 하드웨어 교감 방식입니다. 재미는 있어도 유지 관리되지 않는 기능을 상시 제어용으로 권할 일은 아닙니다.
모듈을 많이 켜면 메뉴 막대가 복잡해지고 노치 뒤로 아이콘이 가려질 수 있습니다. 맥북만 단독으로 쓸 때는 특히 괴롭습니다. 센서처럼 자주 정보를 읽는 모듈은 Stats 자체의 CPU·전력 사용도 늘립니다. 최신 칩에서 센서 대응이 항상 완벽하다고 단정할 수도 없습니다.
이런 불편은 필요한 모듈만 남기는 설정으로 어느 정도 줄일 수 있습니다. 공간은 Hidden Bar 같은 메뉴 막대 정리 앱으로 관리하는 방법도 있습니다. 저처럼 무거운 작업을 한다면 Stats의 추가 자원 사용보다 현재 온도를 파악하는 편익이 더 크게 느껴질 수 있습니다. 설정이 있다고 모든 스위치를 켤 필요는 없습니다.
총평: 더 빠른 맥보다, 상태를 알고 쓰는 맥
Stats를 설치한다고 메모리가 저절로 확보되거나 모델이 빨라지거나 온도가 알아서 내려가지는 않습니다. 35B 모델이 갑자기 70B의 지능을 얻는 일도 없습니다 대신 지금 내 맥에서 무슨 일이 벌어지는지 보여줍니다.
모든 병목을 밝혀주지는 못해도 아무것도 보이지 않는 상태에서 추측만 하는 일은 줄어듭니다. 평상시에는 RunCat으로 CPU 부하를 대략 확인하고, 로컬 LLM을 돌릴 때는 Stats로 GPU·RAM·메모리 압력·스왑·온도를 확인하는 것이 제 방식입니다.
일반 사용자에게는 편리한 메뉴 막대 앱이고, 로컬 모델 사용자에게는 조금 더 안전하고 예측 가능하게 운용하기 위한 계기판입니다. 모델과 양자화 방식을 고르는 것만큼 현재 컴퓨터의 자원 상태를 확인하는 습관도 중요합니다. Stats는 그 습관을 간단하게 만들어줍니다. 그럼 저는 다시 로컬 모델을 혹사시키러 떠나겠습니다.