macOS · Menu bar · RAM

Chrome ate your RAM. MemBar shows you exactly who — then quits it before Activity Monitor even opens.

Activity Monitor buries the real offender under a dozen scattered “Helper” rows and takes three clicks to reach. MemBar sits in the menu bar as compact text — 24.1G — and turns orange, then red, the instant memory pressure says so. Open the dropdown and the top memory hogs are already grouped the way Activity Monitor groups them: Chrome's forty-two helper processes show up as one row, not forty-two. Click the ×. It's gone.

View on GitHub
Warning — 24.1 GB used
24.1 GB used of 32 GB
Healthy Critical
Top Memory
Google Chrome
8.4 GB
Xcode
5.2 GB
Docker
3.8 GB
Figma
2.1 GB
Slack
1.6 GB

The exact Activity Monitor math

Same formula as Activity Monitor. Read straight from the kernel.

Most menu-bar RAM meters guess. MemBar reads the same host_statistics64 counters Activity Monitor itself reads, widens each one to 64-bit so a high-RAM Mac can't overflow the math, and checks real memory pressure — not a heuristic — every time the status item needs to decide whether to turn orange.

MemoryReader.swift
# the same four host_statistics64 / vm_statistics64 counters # Activity Monitor's own Memory tab reads used = (internal − purgeable + wire + compressor) × page_size # each counter widened natural_t → UInt64 first — no overflow, ever pressure = sysctl("kern.memorystatus_vm_pressure_level") // 1·2·4
0 s
Sample interval — a .common run-loop timer that keeps ticking while the menu is open
0 min
Ring buffer behind the sparkline and the History graph — 360 samples
0 pids
Scanned synchronously, single-digit milliseconds, every time the menu opens

Grouping, the hard part

There's no public API for “which process is this, really.”

Chrome's renderer, GPU, and network helpers don't know they belong to Chrome — the OS does, but doesn't say so through any documented call. MemBar asks anyway, and has two fallbacks ready if the answer isn't there.

1

Ask the private API

responsibility_get_pid_responsible_for_pid, resolved at runtime via dlsym — stable since macOS 10.14, never assumed present.

2

Walk the parent chain

If that symbol is missing, proc_pidinfo(PROC_PIDTBSDINFO)pbi_ppid, up to the topmost non-launchd ancestor.

3

Give up gracefully

If even that fails, the process becomes its own one-member group — never dropped, never a crash.

A dozen “Google Chrome Helper (Renderer)” rows in Activity Monitor don't tell you anything you can act on. MemBar's answer is to not show them to you that way in the first place.
Force-quit, done carefully

Same safety net as Activity Monitor — plus a guard it doesn't have.

Force-quitting the wrong process is how you lose unsaved work. Every kill goes through a confirmation, a live pid check, and a name-matched sweep for stragglers — automatically, every time.

Every kill starts with an alert, not a silent SIGKILL. It names the app, how many processes are grouped under it, and exactly how much memory closing it will free — escalated wording for anything whose death takes your whole session with it, like loginwindow or WindowServer.

A pid can be reused by an unrelated process in the seconds between a menu refresh and a click. MemBar checks the root pid is still alive — and still the same process — before it sends anything.
Confirm before force-quit On by default, everywhere. No kill happens without you seeing the app, the process count, and the GB first.
Pid-reuse guard Root pid is re-checked alive immediately before terminate — a reused number is never touched.
Checked every kill
1.5s survivor sweep SIGKILLs stragglers only if they're still running and proc_name still matches what was captured when the group was built.
Name-matched
Confirmation alert Names the app, process count, and memory to be freed — every single time, no "don't ask again."
Every time
Same-uid system processes loginwindow and Finder run as your user, so they can appear — and be killed — same as in Activity Monitor.
Caution — not hidden
MemBar --dump
# same numbers the menu would show — no status item, no event loop System 24.1 GB / 32.0 GB used Warning 1 Google Chrome 8.4 GB 42 procs 2 Xcode 5.2 GB 11 procs ✓ dumped in 4ms
Everything it does

Small surface. No surprises.

One status item, one dropdown, nothing running in the background you didn't ask for.

Menu bar awareness

Compact text like 24.1G turns orange under Warning, red under Critical — so you notice before a beachball does.

Grouped like Activity Monitor

Chrome's dozen helper processes roll up under one “Google Chrome” row, sized by their combined footprint.

One-click force-quit

Click the ×, confirm, done — the same forceTerminate() Activity Monitor itself calls.

Per-process popup

Hover a multi-process row to see each process individually, with its own ×, plus a red “Force Quit All.”

30-minute history

A clickable sparkline opens NOW / AVG / PEAK stats and a full graph with gridlines, a peak marker, and a hover crosshair.

Launch at Login

One checkbox, backed by SMAppService — no separate helper app or login-item bundle.

CLI debug dump

MemBar --dump prints the same numbers the menu shows, with no status item or event loop involved.

Get it

See what's eating your RAM.

Free, open source, and honest about what it needs to work.

View source
macOS 13+ MIT license Not on the App Store

Not on the App Store, and can't be — proc_*, sysctl, and kill all require running outside the App Sandbox, and every one of them is load-bearing for this app to work at all. The GitHub repo above is private during early access — the link is kept here for later, and the build-from-source steps in the README work the same way the moment you're in.