Skip to content

fix(agent): don't read host CPU and memory totals from a Docker VM - #2272

Merged
henrygd merged 1 commit into
henrygd:mainfrom
justadityaraj:fix/macos-host-memory-total
Aug 30, 2026
Merged

henrygd merged 1 commit into
henrygd:mainfrom
justadityaraj:fix/macos-host-memory-total

Conversation

@justadityaraj

Copy link
Copy Markdown
Contributor

📃 Description

Closes #2098

refreshSystemDetails() seeds MemoryTotal and Threads from the Docker daemon's /info response. That response describes the machine the daemon runs on, which is only this host when Docker shares its kernel. On macOS and Windows it runs inside a Linux VM, so the system-details header reports the VM's memory as the host total — 16 GiB on the reporter's 64 GiB Mac.

The CPU numbers are wrong the same way and for the same reason: threads comes from hostInfo.NCPU, and the lxc branch immediately below then clamps cores down to it, so a VM given fewer CPUs than the Mac has shrinks both values.

The fix only consults Docker's host info where the daemon runs natively. On macOS and Windows the existing fallbacks take over, and those read this host: mem.VirtualMemory() for memory and cpu.Counts(true) for threads.

Memory percentage, the memory chart and alerts were already correct, since they come from mem.VirtualMemory() rather than from Docker.

🪵 Changelog

🔧 Fixed

  • macOS and Windows agents no longer report the Docker VM's memory as the host's total memory
  • macOS and Windows agents no longer report the Docker VM's CPU count as the host's cores/threads

Verification

  • gofmt clean on the changed file
  • go vet ./agent/... clean for GOOS=linux and GOOS=darwin
  • go build ./agent/... and go test -c ./agent/ succeed for linux/amd64 and darwin/arm64
  • go test ./internal/... passes for every package that builds on this Windows host; internal/hub, internal/site and the two internal/cmd packages fail setup here before and after the change, because agent/sensors_windows.go embeds a LibreHardwareMonitor artifact this checkout does not build

refreshSystemDetails() takes NCPU and MemTotal from the Docker daemon's
/info response. That only describes this machine when the daemon shares its
kernel. On macOS and Windows Docker runs inside a Linux VM, so the system
details header shows the VM's memory as the host total, and the VM's CPU
count clamps both cores and threads through the lxc branch below it.

Only consult Docker's host info on platforms where the daemon runs natively.
Everything else already falls back to gopsutil, which reads this host.
@justadityaraj
justadityaraj requested a review from henrygd as a code owner August 27, 2026 22:10

@henrygd henrygd left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. Gracias!

@henrygd
henrygd merged commit 7c60f02 into henrygd:main Aug 30, 2026
JuliusFreudenberger pushed a commit to JuliusFreudenberger/nix-config that referenced this pull request Sep 3, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [henrygd/beszel](https://github.com/henrygd/beszel) | minor | `0.18.8` → `0.19.0` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/12) for more information.

---

### Release Notes

<details>
<summary>henrygd/beszel (henrygd/beszel)</summary>

### [`v0.19.0`](https://github.com/henrygd/beszel/releases/tag/v0.19.0)

[Compare Source](henrygd/beszel@v0.18.8...v0.19.0)

:warning:  **Potential breaking change:** Agents now verify HTTPS certificates. If an agent connects to a hub using a self-signed or otherwise untrusted certificate, configure `CA_CERT_FILE` with the appropriate CA certificate or the connection will be rejected.

#### What's Changed

- Add ZFS pool and dataset monitoring ([#&#8203;2209](henrygd/beszel#2209))
- Add container health alerts with log excerpts in notifications ([#&#8203;2225](henrygd/beszel#2225))
- Add alerts for failed systemd services ([#&#8203;2173](henrygd/beszel#2173))
- Add alerts for CPU I/O wait and steal time ([#&#8203;2249](henrygd/beszel#2249))
- Add cumulative disk read and write totals to the Disk I/O sheet ([#&#8203;2179](henrygd/beszel#2179))
- Add Greek and Uzbek translations ([#&#8203;2034](henrygd/beszel#2034))
- Add custom root disk names and sort disks alphabetically ([#&#8203;2006](henrygd/beszel#2006))
- Improve alert security by enforcing system ownership and blocking additional internal notification URL ranges
- Improve ATA SMART warnings for critical attributes ([#&#8203;2275](henrygd/beszel#2275))
- Fix a hub crash caused by concurrent SSH client shutdown ([#&#8203;2277](henrygd/beszel#2277))
- Fix host CPU and memory totals when Docker runs in a VM on macOS or Windows ([#&#8203;2272](henrygd/beszel#2272))
- Fix multi-line `TOKEN_FILE` loading ([#&#8203;2276](henrygd/beszel#2276))
- Fix QNAP MD RAID arrays being incorrectly reported as failed ([#&#8203;2065](henrygd/beszel#2065))
- Fix Intel GPU power data disappearing between samples ([#&#8203;2256](henrygd/beszel#2256))
- Fix swap usage calculations to include cached swap ([#&#8203;2267](henrygd/beszel#2267))
- Fix agent payload failures caused by invalid UTF-8 in battery names ([#&#8203;2241](henrygd/beszel#2241))
- Fix uptime reporting inside Linux containers ([#&#8203;2180](henrygd/beszel#2180))
- Fix fan discovery on legacy hwmon devices ([#&#8203;2238](henrygd/beszel#2238))
- Fix CPU model detection on MIPS systems ([#&#8203;2138](henrygd/beszel#2138))
- Fix machine ID generation on FreeBSD and pfSense installations ([#&#8203;2274](henrygd/beszel#2274))
- Fix agent environment variable updates during reinstall ([#&#8203;2107](henrygd/beszel#2107))
- Fix the install script reporting the wrong listen address after upgrades ([#&#8203;2243](henrygd/beszel#2243))
- Fix load average precision on macOS, BSD, and Windows ([#&#8203;2245](henrygd/beszel#2245))
- Update the Go version and Go dependencies

#### New Contributors

- [@&#8203;IlyaMur](https://github.com/IlyaMur) made their first contribution in [#&#8203;2238](henrygd/beszel#2238)
- [@&#8203;alecrubin](https://github.com/alecrubin) made their first contribution in [#&#8203;2180](henrygd/beszel#2180)
- [@&#8203;toomore](https://github.com/toomore) made their first contribution in [#&#8203;2241](henrygd/beszel#2241)
- [@&#8203;mews-se](https://github.com/mews-se) made their first contribution in [#&#8203;2243](henrygd/beszel#2243)
- [@&#8203;justadityaraj](https://github.com/justadityaraj) made their first contribution in [#&#8203;2245](henrygd/beszel#2245)
- [@&#8203;wassupluke](https://github.com/wassupluke) made their first contribution in [#&#8203;2256](henrygd/beszel#2256)
- [@&#8203;ErkinjonYusupov](https://github.com/ErkinjonYusupov) made their first contribution in [#&#8203;2034](henrygd/beszel#2034)
- [@&#8203;snh](https://github.com/snh) made their first contribution in [#&#8203;2279](henrygd/beszel#2279)
- [@&#8203;spatiumstas](https://github.com/spatiumstas) made their first contribution in [#&#8203;2249](henrygd/beszel#2249)
- [@&#8203;martinstenrose](https://github.com/martinstenrose) made their first contribution in [#&#8203;2173](henrygd/beszel#2173)
- [@&#8203;mleczakm](https://github.com/mleczakm) made their first contribution in [#&#8203;2225](henrygd/beszel#2225)
- [@&#8203;santhiprakash](https://github.com/santhiprakash) made their first contribution in [#&#8203;2269](henrygd/beszel#2269)

**Full Changelog**: <henrygd/beszel@v0.18.8...v0.19.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTAuMSIsInVwZGF0ZWRJblZlciI6IjQzLjE1MC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.jfreudenberger.de/JuliusFreudenberger/nix-config/pulls/43
xiaoran7 pushed a commit to xiaoran7/beszel that referenced this pull request Oct 17, 2026
…enrygd#2272)

refreshSystemDetails() takes NCPU and MemTotal from the Docker daemon's
/info response. That only describes this machine when the daemon shares its
kernel. On macOS and Windows Docker runs inside a Linux VM, so the system
details header shows the VM's memory as the host total, and the VM's CPU
count clamps both cores and threads through the lxc branch below it.

Only consult Docker's host info on platforms where the daemon runs natively.
Everything else already falls back to gopsutil, which reads this host.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: macOS agent reports Docker VM memory as host total memory

2 participants