IA / Automatisation 22 avril 2026

2026 — OpenClaw : ulimit, mémoire et garde-fous CPU sur une Mac mini louée sous launchd

Équipe Ingénierie ProxyMac 22 avril 2026 ~12 min de lecture

OpenClaw sur une Mac mini ProxyMac M4 en HK, JP, KR, SG ou US meurt en silence lorsque la mémoire résidente dépasse ce que launchd jugeait sûr : l’interface affiche encore « en cours d’exécution », mais les adaptateurs de canaux cessent d’accepter du travail parce que le noyau évince des pages plus vite que votre intervalle de sonde. Les opérateurs accusent les « mauvais modèles » quand la cause réelle est le ulimit -n par défaut à 256 sur les jobs sans surveillance, ou des bombes à forks depuis les enfants MCP décrits dans le guide configuration MCP. Ce guide 2026 cartographie les signatures d’OOM silencieux, oppose les ulimits shell vs LaunchAgent, liste trois seuils de télémetrie chiffrés (70 % de RAM de marge, 10 k fichiers ouverts, 2 Go de swapins par heure), montre un fragment plist copiable-collable pour SoftResourceLimits, et relie les limites à la concurrence d’agents parallèles ainsi qu’aux sondes de santé pour alerter avant que les utilisateurs ne s’en aperçoivent.

Associez au dépannage de déploiement pour le triage des journaux et aux runbooks du centre d’aide ; montez en gamme matérielle via les tarifs lorsque les limites heurtent l’architecture, pas une simple coquille.

OOM silencieux et signaux de limite à journaliser avant d’accuser les modèles

Le journal unifié macOS enterre souvent les événements jetsam sous le bruit de niveau info. Surveillez un p95 de latence des outils >4× alors que le CPU reste <40 %—ce motif hurle pression mémoire, pas LLM lents. Un autre indice : ENOTFILE ou Too many open files dans les ponts stdio MCP lorsque les agents concurrents explosent.

  • Swapins du compresseur : un débit soutenu >500 Mo/h sur une mini 16 Go signifie que vous avez déjà dépassé la marge confortable.
  • Chaînes throttleReason LaunchAgent mentionnant resource-limits—capturez la version du plist dans git.
  • 502 fantômes depuis les passerelles HTTP locales quand le processus worker ne peut pas naître—souvent RLIMIT_NPROC.

launchd vs shell interactif : deux mondes ulimit distincts

Les sessions SSH sourcées depuis ~/.zprofile peuvent exécuter ulimit -n 65535 ; votre LaunchAgent non, sauf duplication. Imprimez toujours les limites dans le même script enveloppe que le plist invoque, pas depuis le shell de votre portable.

Contextemaxfiles typiqueQui le fixeRisque
Connexion SSH10240+rc shellTrompeur lors du debug launchd
Défaut LaunchAgent256–1024Valeurs OSLes rafales MCP s’épuisent vite
Après SoftResourceLimits plist8192–65535Votre équipe opsDoit correspondre à l’hygiène FD du code

Seuils de télémetrie qui justifient de pager quelqu’un

Instrumentez votre script de sonde de santé existant pour ajouter trois nombres à syslog chaque minute : pages libres, nombre de descripteurs de fichiers et pages compresseur. Appelez l’astreinte lorsque deux échantillons consécutifs franchissent :

Paquet de règles : RAM libre sous 2,5 Go sur une SKU 16 Go, FD ouverts au-delà de 8000, ou pages compresseur au-delà de 120000—ajustez proportionnellement pour les machines 24 Go.

Fragment plist : SoftResourceLimits sans faire sauter launchd

Ajoutez les clés sous le dictionnaire de l’agent—pas le domaine global. Gardez les limites dures ≤ limites souples × 1,25 pour que les mauvaises configs échouent vite au lieu de bloquer.

<key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key><integer>8192</integer> <key>NumberOfProcesses</key><integer>512</integer> <key>Stack</key><integer>8388608</integer> </dict>

Rechargez avec launchctl kickstart -k gui/$(id -u)/com.example.openclaw seulement après avoir conservé une seconde session SSH—réutilisez la discipline du guide récupération redémarrage passerelle.

Chaque agent parallèle dans le guide de concurrence duplique les handles modèle et les sockets MCP. Si doubler la concurrence ajoute 3,2 Go de RSS en lab, ne doublez pas aussi NumberOfFiles « au cas où »—vous masquerez des fuites. Plafonnez plutôt la concurrence jusqu’à ce que la RSS tienne dans 70 % de la RAM physique après les services de base macOS.

Note secrets : augmenter RLIMIT_MEMLOCK aide rarement OpenClaw ; gardez les secrets Keychain selon le guide durcissement des secrets plutôt que des caches mmap lourds.

FAQ

Dois-je lancer OpenClaw en root pour des limites plus hautes ? Non—corrigez les limites du plist ; root élargit la surface de blast.

Le Moniteur d’activité suffit-il ? Pour un coup d’œil oui, mais des journaux automatisés memory_pressure attrapent les régressions nocturnes.

Et les sidecars Docker ? Si vous colocalisez des conteneurs, soustrayez d’abord leur RSS du budget 70 %.

Pourquoi la Mac mini Apple Silicon reste adaptée à OpenClaw gourmand

M4 à mémoire unifiée laisse les poids du modèle et les services macOS partager la bande passante sans surprises NUMA PCIe fréquentes sur des VM x86 bon marché. Louer par région via les tarifs aligne la finance lorsque vous avez besoin d’une SKU 24 Go pour des limites plus hautes, et l’intégration native launchd bat des conteneurs Linux-systemd qui prétendent être « compatibles Mac ». Documentez les versions de plist à côté des commits Git selon le GitOps, liez ce guide à l’onboarding et recyclez la mini quand la charge se termine—les limites sont plus simples quand le métal est prévisible.

Dimensionnez le matériel OpenClaw

Mac mini HK / JP / KR / SG / US pour l’automatisation avec marge