O que medimos e como
Os três apps rodaram no mesmo Mac: um Apple M5 Max com 36 GiB de memória e macOS 27.2. Cada um foi configurado com 8 CPUs e 12 GiB, iniciado do zero com seu próprio comando e executado sozinho, com os demais encerrados e a ausência de seus processos verificada. Os valores em repouso vêm de uma janela de 60 segundos após 45 segundos de estabilização, contando todos os processos do produto: o app, seus auxiliares e o mecanismo com seu sistema Linux. Os valores dos contêineres são medianas de cinco amostras após um aquecimento; diferenças de até 10% contam como empate.
O Oxcart 0.1.2 foi medido em 2026-10-10 com seu cliente docker 29.9 incluído. O OrbStack 2.2.3 e o Docker Desktop 4.94.0 foram medidos mais cedo no mesmo dia, no mesmo Mac e com o mesmo sistema de medição, usando docker 29.4. Cada produto executa seu próprio kernel Linux. É uma rodada por produto em uma máquina, não um estudo; o método é igual para todos.
Memória em repouso sem contêineres
| App | Memória em repouso |
|---|---|
| Oxcart 0.1.2 | 776 MiB |
| OrbStack 2.2.3 | 792 MiB |
| Docker Desktop 4.94.0 | 1.745 MiB |
Essa é a memória que um app de contêineres consome só por estar pronto: entre sessões de trabalho, durante reuniões ou em um notebook onde fica aberto o dia todo. Oxcart e OrbStack estão no mesmo nível; o Docker Desktop retém mais que o dobro.
O custo de monitorar seus contêineres
Painéis, monitores de terminal e agentes de programação consultam as estatísticas dos contêineres constantemente, por isso o custo de leitura importa mais do que parece.
| Medida | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
CPU de um cliente de docker stats em fluxo contínuo | 1,29% | 3,81% | 5,45% |
docker stats --no-stream | 1.038 ms | 2.050 ms | 2.054 ms |
CPU como porcentagem de um núcleo. Oxcart 0.1.2 medido em 2026-10-10 com seu cliente docker 29.9 incluído; OrbStack 2.2.3 e Docker Desktop 4.94.0 medidos mais cedo no mesmo dia, no mesmo Mac, com o mesmo sistema de medição e docker 29.4.
O item do Oxcart na barra de menus, com 20 contêineres em execução, consome 0,0004% de um núcleo e causa 0,033 despertares por segundo. Esse valor considera apenas o app, não o mecanismo.
Sob carga: empate
Quando os contêineres fazem trabalho de verdade, os apps se aproximam, porque o trabalho em si predomina. Duas linhas da mesma rodada:
| Medida | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
| CPU do Mac por segundo de CPU dentro do contêiner | 1,10× | 1,11× | 1,09× |
| Memória do Mac por contêiner que acessa 256 MiB | 235 MiB | 266 MiB | 236 MiB |
Na prática: uma compilação ou um teste limitado pela CPU consome aproximadamente a mesma CPU do Mac nos três apps, e um contêiner que usa 256 MiB consome cerca disso no seu Mac. O que muda é tudo ao redor do trabalho: quanto demora cada docker run, stop e limpeza, onde o Oxcart leva vantagem (vs. Docker Desktop, vs. OrbStack).
Ao terminar: a memória volta ao macOS
Desde o Oxcart 0.1.3, cerca de 30 s após seu último contêiner parar, o Oxcart reinicia seu ambiente Linux e a memória volta ao macOS: 570 MiB, antes 3.319 MiB, 32 s após o último contêiner parar (segunda rodada: de 3.352 para 579 MiB). Isso só acontece quando nenhum contêiner está em execução. Ocorre em segundo plano: um comando Docker que chegue durante o reinício apenas espera sua conclusão.
Medido no Oxcart 0.1.3.
Meça a memória de um app de contêineres no seu Mac
- Comece com o Mac sem atividade. Encerre os outros apps de contêineres, pare seus contêineres e espere um minuto após iniciar o app para que as tarefas de inicialização terminem.
- Encontre todos os processos do app. No Monitor de Atividade, abra a aba Memória e procure o nome do app; o processo que executa o ambiente Linux costuma ser o maior. No terminal,
ps -axo pid,rss,comm | grep -i <app>lista os processos. - Leia a memória contabilizada pelo macOS. Use a coluna Memória no Monitor de Atividade, ou
footprint <pid>para cada processo, e some os valores. Só o tamanho residente (RSS) pode superestimar ou subestimar a memória compartilhada e comprimida. - Meça com sua carga em execução. Inicie sua stack Compose habitual, use-a por alguns minutos e leia os mesmos valores novamente.
docker stats --no-streammostra o que cada contêiner usa dentro do ambiente Linux. - Meça depois de parar. Pare tudo e leia os valores mais uma vez, um minuto depois. Essa é a memória que o app mantém em repouso entre sessões de trabalho.
Configurações que importam
- Limites do app. Cada app limita as CPUs e a memória que seu ambiente Linux pode usar. No Oxcart: Settings › Resources, ou
oxcart config set cpus=6eoxcart config get; os valores valem a partir da próxima inicialização. Um limite muito acima do que sua stack precisa não traz vantagem. - Limites por contêiner.
--memory,--cpuse--pids-limitnodocker run, oumem_limit,cpusepids_limitno Compose, impedem que um serviço descontrolado tome todos os recursos. - Pare o que não estiver usando.
docker compose stoppara stacks às quais você voltará;docker compose downpara as demais. No Oxcart, parar o último contêiner também permite devolver a memória ao macOS. - Monitore com baixo custo. Prefira
docker stats --no-streamnos scripts e dê aos agentes de programação uma ferramenta de resumo em vez de estatísticas brutas (Docker para agentes de programação com IA).
Perguntas
Quanta memória o Docker usa em um Mac?
Depende do app e do trabalho dos seus contêineres. Sem contêineres em execução, em um Mac com Apple silicon configurado com 12 GiB, medimos 776 MiB para Oxcart, 792 MiB para OrbStack e 1.745 MiB para Docker Desktop, contando todos os processos de cada produto. Quando os contêineres rodam, a memória acompanha as cargas de trabalho.
Por que o Docker Desktop usa tanta memória?
Todo app de contêineres no Mac executa um sistema Linux, e a memória acessada pelas cargas de trabalho aparece como um grande processo no Mac. Na nossa medição, o Docker Desktop também teve o maior consumo em repouso dos três: 1.745 MiB sem contêineres. Reduza o limite de memória nas configurações, pare os contêineres desnecessários e compare uma alternativa como o Oxcart, que usou 776 MiB em repouso no mesmo Mac.
O Oxcart devolve memória ao macOS?
Sim, assim que nada estiver rodando. Desde o Oxcart 0.1.3, cerca de 30 s após seu último contêiner parar, o Oxcart reinicia seu ambiente Linux e a memória volta ao macOS: 570 MiB, antes 3.319 MiB, 32 s após o último contêiner parar, em uma medição com uma versão anterior ao lançamento. Isso só acontece quando nenhum contêiner está em execução.
Como limito a memória e a CPU de um contêiner?
Por contêiner: docker run --memory 512m --cpus 1.5 …, ou mem_limit e cpus em um serviço Compose. O Oxcart aplica atualizações de memória, CPU e limite de processos com docker update, e elas persistem mesmo quando um reinício recria o contêiner.
Como defino quantas CPUs e quanta memória o Oxcart pode usar?
Em Settings › Resources, ou no terminal com oxcart config set cpus=4 e oxcart config get para ver os valores efetivos e os limites do seu Mac. Os novos valores valem a partir da próxima inicialização.
docker stats deixa meu Mac lento?
Um fluxo de docker stats consome CPU em todos os apps. Medimos 1,3% de um núcleo para Oxcart, 3,8% para OrbStack e 5,5% para Docker Desktop; o Oxcart teve o menor valor. Uma consulta de docker stats --no-stream para 20 contêineres levou 1,0 s no Oxcart, cerca de metade do tempo dos outros dois.
Fontes e método
- Oxcart 0.1.2, OrbStack 2.2.3 e Docker Desktop 4.94.0, medidos em 2026-10-10 no mesmo Mac (Apple M5 Max, 36 GiB, macOS 27.2), com 8 CPUs e 12 GiB cada, um produto por vez.
- Memória devolvida após o último contêiner parar: Oxcart 0.1.3.
- Custo da barra de menus: medido no Oxcart em 2026-10-09.