Что и как мы измеряли
Все три приложения работали на одном Mac: Apple M5 Max с 36 GiB памяти и macOS 27.2. Каждому выделили 8 CPU и 12 GiB, запускали заново его собственной командой и проверяли отдельно: остальные приложения закрывали и убеждались, что их процессы завершены. Показатели простоя получены за 60 секунд после 45 секунд стабилизации; учтены все процессы продукта: приложение, вспомогательные процессы и движок с его системой Linux. Показатели контейнеров — медианы пяти замеров после прогрева; различия в пределах 10 % считаются равными результатами.
Oxcart 0.1.2 измеряли 2026-10-10 со встроенным клиентом docker 29.9. OrbStack 2.2.3 и Docker Desktop 4.94.0 измеряли ранее в тот же день, на том же Mac и теми же средствами измерения, с docker 29.4. Каждый продукт использует собственное ядро Linux. Это один прогон каждого продукта на одной машине, а не исследование; методика для всех одинакова.
Память в простое без контейнеров
| Приложение | Память в простое |
|---|---|
| Oxcart 0.1.2 | 776 MiB |
| OrbStack 2.2.3 | 792 MiB |
| Docker Desktop 4.94.0 | 1 745 MiB |
Столько памяти приложение для контейнеров занимает просто в состоянии готовности: между рабочими сессиями, во время встреч или на ноутбуке, где оно открыто весь день. Oxcart и OrbStack здесь на одном уровне; Docker Desktop удерживает более чем вдвое больше.
Затраты на мониторинг контейнеров
Панели управления, терминальные мониторы и агенты программирования постоянно запрашивают статистику контейнеров, поэтому стоимость её получения важнее, чем кажется.
| Показатель | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
CPU одного потокового клиента docker stats | 1,29 % | 3,81 % | 5,45 % |
docker stats --no-stream | 1 038 ms | 2 050 ms | 2 054 ms |
CPU в процентах от одного ядра. Oxcart 0.1.2 измеряли 2026-10-10 со встроенным клиентом docker 29.9; OrbStack 2.2.3 и Docker Desktop 4.94.0 — ранее в тот же день, на том же Mac, теми же средствами измерения и с docker 29.4.
Собственный элемент Oxcart в строке меню при 20 запущенных контейнерах потребляет 0,0004 % ядра и вызывает 0,033 пробуждения в секунду. Это показатель только приложения, без движка.
Под нагрузкой: на одном уровне
Когда контейнеры выполняют реальную работу, показатели приложений сближаются: основную часть ресурсов потребляет сама работа. Две строки из одного прогона:
| Показатель | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
| CPU Mac на одну CPU-секунду внутри контейнера | 1,10× | 1,11× | 1,09× |
| Память Mac на контейнер, обращающийся к 256 MiB | 235 MiB | 266 MiB | 236 MiB |
На практике сборка или тест, ограниченные производительностью CPU, потребляют примерно одинаковый объём CPU Mac во всех трёх приложениях, а контейнер, использующий 256 MiB, занимает на Mac примерно столько же. Разница — в операциях вокруг работы: времени каждого docker run, stop и удаления ресурсов. Именно здесь Oxcart впереди (сравнение с Docker Desktop, сравнение с OrbStack).
После работы память возвращается macOS
Начиная с Oxcart 0.1.3, примерно через 30 s после остановки последнего контейнера Oxcart перезапускает свою часть Linux и возвращает память macOS: 570 MiB вместо 3 319 MiB через 32 s после остановки последнего контейнера (второй прогон: с 3 352 до 579 MiB). Это происходит только при отсутствии запущенных контейнеров. Перезапуск выполняется в фоне: поступившая в это время команда Docker просто ждёт его завершения.
Измерено на Oxcart 0.1.3.
Измерьте память приложения для контейнеров на своём Mac
- Начните с Mac без нагрузки. Закройте другие приложения для контейнеров, остановите контейнеры и подождите минуту после запуска приложения, чтобы завершились стартовые операции.
- Найдите все процессы приложения. В «Мониторинге системы» откройте вкладку «Память» и найдите имя приложения; процесс, отвечающий за Linux, обычно самый большой. В терминале их выводит
ps -axo pid,rss,comm | grep -i <app>. - Посмотрите память, учитываемую macOS. Используйте столбец «Память» в «Мониторинге системы» или
footprint <pid>для каждого процесса и сложите значения. Один лишь резидентный размер (RSS) может завышать или занижать объём общей и сжатой памяти. - Измерьте показатели под своей нагрузкой. Запустите обычный стек Compose, поработайте с ним несколько минут и снова снимите те же показатели.
docker stats --no-streamпоказывает, сколько каждый контейнер использует внутри Linux. - Измерьте после остановки. Остановите всё и через минуту ещё раз снимите показатели. Это память, которую приложение удерживает в простое между рабочими сессиями.
Важные настройки
- Лимиты приложения. Каждое приложение ограничивает число CPU и память своей части Linux. В Oxcart: Settings › Resources либо
oxcart config set cpus=6иoxcart config get; значения применяются при следующем запуске. Лимит намного выше потребностей вашего стека ничего не даёт. - Лимиты контейнера.
--memory,--cpusи--pids-limitвdocker runлибоmem_limit,cpusиpids_limitв Compose не дают одному вышедшему из-под контроля сервису занять все ресурсы. - Останавливайте то, что не используете.
docker compose stop— для стеков, к которым вернётесь;docker compose down— для остальных. В Oxcart остановка последнего контейнера также позволяет вернуть память macOS. - Снижайте затраты на мониторинг. В скриптах предпочитайте
docker stats --no-stream, а агентам программирования давайте инструмент сводки вместо сырых статистических данных (Docker для ИИ-агентов программирования).
Вопросы
Сколько памяти Docker использует на Mac?
Это зависит от приложения и работы контейнеров. Без запущенных контейнеров на одном Mac с Apple silicon при лимите 12 GiB мы измерили 776 MiB у Oxcart, 792 MiB у OrbStack и 1 745 MiB у Docker Desktop, учитывая все процессы каждого продукта. После запуска контейнеров расход памяти зависит от нагрузки.
Почему Docker Desktop использует так много памяти?
Любое приложение для контейнеров на Mac запускает систему Linux, а память, к которой обращаются её нагрузки, отображается на Mac как один большой процесс. В наших измерениях у Docker Desktop был также наибольший расход в простое из трёх: 1 745 MiB без контейнеров. Снизьте лимит памяти в настройках, остановите ненужные контейнеры и сравните альтернативу, например Oxcart, который занимал 776 MiB в простое на том же Mac.
Возвращает ли Oxcart память macOS?
Да, когда ничего не работает. Начиная с Oxcart 0.1.3, примерно через 30 s после остановки последнего контейнера Oxcart перезапускает свою часть Linux и возвращает память macOS: в измерении на предварительной версии объём упал с 3 319 MiB до 570 MiB через 32 s после остановки последнего контейнера. Это происходит только при отсутствии запущенных контейнеров.
Как ограничить память и CPU контейнера?
Для отдельного контейнера: docker run --memory 512m --cpus 1.5 … либо mem_limit и cpus в сервисе Compose. Oxcart применяет изменения лимитов памяти, CPU и числа процессов через docker update; они сохраняются и при повторном создании контейнера из-за перезапуска.
Как задать число CPU и объём памяти для Oxcart?
В Settings › Resources либо в терминале через oxcart config set cpus=4 и oxcart config get, чтобы увидеть действующие значения и ограничения Mac. Новые значения применяются при следующем запуске.
Замедляет ли docker stats мой Mac?
Поток docker stats потребляет CPU в каждом приложении. Мы измерили 1,3 % ядра у Oxcart, 3,8 % у OrbStack и 5,5 % у Docker Desktop; у Oxcart показатель самый низкий. Разовый вызов docker stats --no-stream для 20 контейнеров занял у Oxcart 1,0 s, примерно вдвое меньше, чем у остальных двух.
Источники и методика
- Oxcart 0.1.2, OrbStack 2.2.3 и Docker Desktop 4.94.0, измерения 2026-10-10 на одном Mac (Apple M5 Max, 36 GiB, macOS 27.2), каждому — 8 CPU и 12 GiB, по одному продукту за раз.
- Возврат памяти после остановки последнего контейнера: Oxcart 0.1.3.
- Затраты элемента строки меню: измерено на Oxcart, 2026-10-09.