2026 Mac cloud MacLogin : tas Node de la passerelle OpenClaw, SoftResourceLimits launchd et reprise après OOM
Les équipes qui exécutent la passerelle OpenClaw sous launchd sur des Mac mini Apple Silicon loués subissent des sorties mémoire (OOM) lorsque des processus Node long-lived font croître le RSS plus vite que ne le supposent les modèles d'autoscaling. Ce runbook de mai 2026 précise qui doit régler en premier, quelles baselines RSS et descripteurs de fichiers capturer, comment relier les symptômes à launchd SoftResourceLimits et aux NODE_OPTIONS plafonds de tas, et un déploiement en neuf étapes qui maintient les ponts de chat entre les régions MacLogin : Hong Kong, Japon, Corée, Singapour et États-Unis.
Vous trouverez une matrice ressource à cinq colonnes (distincte des anciens tableaux à trois colonnes d'exposition ailleurs sur ce blog), des commandes de vérification exécutables et une FAQ alignée avec le JSON-LD de cette page. Croisez ce guide avec les métriques Prometheus des passerelles, les diagnostics doctor et l'onboarding headless + install-daemon. Les politiques d'exploitation vont aussi avec l'aide MacLogin ; la planification de capacité renvoie aux tarifs lorsque vous répartissez les passerelles par métropole.
Qui doit dimensionner le tas Node avant les quotas fournisseur
Le dimensionnement du tas relève des ingénieurs plateforme—pas des auteurs de prompts—car le ramasse-miettes V8 réagit aux objets retenus à travers les exécutions d'outils, les tampons webhook et les bacs à sable de plugins. Si votre organisation sépare déjà le SSH d'urgence humain des comptes d'automatisation, appliquez la même logique à l'observabilité : étiquetez les processus passerelle avec les identifiants de bail MacLogin pour qu'un pic à Tokyo n'écrase pas les baselines de Singapour.
Les concepteurs de prompts peuvent demander de plus grandes fenêtres de contexte, mais ils ne peuvent pas lever en toute sécurité les plafonds RSS sans merge request qui met à jour à la fois le plist et le modèle de capacité. Traitez chaque hausse de tas comme un ajout de stockage base de données : joignez un graphe, un responsable de rollback et un delta de coût mensuel attendu, car des tas plus grands impliquent souvent des paliers MacLogin plus élevés une fois les sidecars métriques et TLS ajoutés.
Lorsque plusieurs directions partagent un mini pendant un pilote, publiez une seule invitation calendrier « comité de dimensionnement passerelle » pour que FinOps, sécurité et plateforme ML entendent les mêmes chiffres. Sinon vous oscillerez entre des week-ends « tas illimité » et des lundis matin paniqués où quelqu'un colle une capture RSS 12 Go dans le chat sans horodatage.
- Équipes SRE qui maintiennent les LaunchAgents
ai.openclaw.gateway. - Revue FinOps qui demande pourquoi un seul mini héberge trois flux de modèle concurrents.
- Architectes sécurité qui exigent un crash déterministe plutôt que des fuites mémoire lentes qui échappent aux fenêtres d'échantillonnage d'audit.
Signaux douloureux : marches RSS, EMFILE et reprises silencieuses côté chat
Les utilisateurs ouvrent rarement un ticket intitulé « old space V8 proche de la limite ». Ils signalent des outils lents, des réactions Slack dupliquées ou « la passerelle a redémarré deux fois pendant le stand-up ». Sous le capot vous pouvez voir des redémarrages watchdog issus d'anciens runbooks boucle de crash—cet article cible plutôt la pression mémoire progressive où le CPU reste bas mais le RSS monte de façon monotone sur 6 à 12 heures.
Les rafales EMFILE sont différentes : elles coïncident souvent avec un fan-out webhook brutal ou des clients long polling mal configurés qui ne ferment jamais les sockets. Évitez tcpdump ou captures équivalentes en production sans validation sécurité, mais tracez connexions acceptées vs fermées par minute à côté du RSS pour ne pas diagnostiquer une fuite de descripteurs comme une fuite de tas et perdre une semaine sur le mauvais levier.
Les reprises silencieuses côté chat surviennent lorsque les SDK font du backoff exponentiel sur plusieurs minutes alors que le processus passerelle est techniquement vivant mais bloqué en GC. Instrumentez des histogrammes de latence côté client par région pour que les opérateurs de Hong Kong n'attribuent pas « Slack est lent partout » à un seul mini JP affamé en old space.
Mesures de référence à capturer 48 h avant tout réglage
Avant d'éditer les plists, archivez un RSS échantillonné toutes les 60 s, le nombre de descripteurs de fichiers ouverts et, si votre sidecar métrique l'expose, l'utilisation de la boucle d'événements. Une rétention minimale de 180 jours pour les équipes orientées SOC2 permet aux auditeurs de rejouer la semaine où vous avez élargi --max-old-space-size. Sur les mini MacLogin, colocalisez les scrapers en loopback selon le guide de liaison localhost pour que Prometheus ne devienne pas un risque de déplacement latéral.
Séparez les échantillons par type de charge : sessions de chat interactives, lots d'outils façon cron nocturne et imports « big bang » manuels sollicitent des chemins d'allocateur différents. Si vous ne mesurez que le trafic diurne, vous manquerez le saut RSS de minuit causé par des jobs de synthèse planifiés qui hydratent de gros blobs JSON en mémoire au lieu de les streamer depuis le disque.
Enfin, capturez compteurs de swap et pageouts même si vous espérez ne jamais les utiliser ; un RSS plat avec pageouts croissants signale classiquement qu'il faut monter de palier plutôt que de continuer à comprimer le tas.
Matrice à cinq colonnes : signal, cause probable, premier levier, champ launchd, vérification
| Signal tableau de bord | Cause runtime probable | Premier levier de config | Compagnon launchd / plist | Commande ou sonde de vérification |
|---|---|---|---|---|
| RSS +40–80 Mo/h avec QPS plat | Tampons détachés des complétions en streaming | NODE_OPTIONS=--max-old-space-size=4096 (plafond exemple) |
EnvironmentVariables |
Échantillon processus + openclaw doctor après redémarrage |
| Sortie brutale juste après un pic | Épuisement des descripteurs de fichiers | Réduire le fan-out webhook concurrent dans la config passerelle | SoftResourceLimits FileDescriptor soft = 10240 (exemple) |
lsof -nP -p <pid> | wc -l |
| CPU saturé, RSS stable | Quota CPU serré ou GC qui martèle faute de tas | Augmenter légèrement le tas avant le quota CPU | CPU secondes souples dans SoftResourceLimits |
sample gateway_pid 5 1 (Instruments ou échantillonneur hôte) |
| Sondes de santé instables seulement pendant le drain | Chemin d'arrêt qui libère lentement les sockets | Alignez-vous sur les fenêtres d'arrêt gracieux + drain d'au moins 90 secondes | ThrottleInterval sur le job watchdog compagnon |
curl -fsS http://127.0.0.1:18789/healthz depuis localhost |
Gouvernance de flotte : que casse-t-on en copiant le plist d'une autre région
Copier un bloc SoftResourceLimits de Séoul vers un hôte de production américain sans re-baseline est le moyen le plus rapide de créer des faux positifs : le chat US transporte souvent des pièces jointes plus lourdes et des transcriptions d'outils plus longues, donc la même limite souple de descripteurs qui ne s'est jamais déclenchée en Corée peut osciller chaque heure en Californie.
Instituez une convention de nommage des dépôts plist incluant code région + palier de bail + version majeure passerelle. Lorsqu'OpenClaw monte de version majeure pendant votre fenêtre de maintenance, relancez la capture 48 h car les bacs à sable de plugins et les tampons de flux par défaut changent même si votre code applicatif est inchangé.
Enfin, reliez la gouvernance à la réalité RH : les prestataires en fin de mission ne doivent pas être les seuls à savoir pourquoi un plafond magique de 4096 MiB existe—documentez l'ID de ticket d'incident à côté du commentaire plist pour que l'ingénieur d'astreinte suivant sache si l'entier vient d'un RSS mesuré ou d'un bricolage temporaire lors d'une démo conférence.
Neuf étapes : de la mesure à la production gardée
- Geler les mises à jour auto de plugins le week-end pour que les deltas RSS reflètent le trafic, pas le graphe npm (voir runbook mises à jour auto).
- Instantané des tarballs
~/.openclawselon le guide de sauvegarde du répertoire d'état. - Préprod : nouveaux
NODE_OPTIONSsur un mini lab Séoul avec rejoueur de charge synthétique. - Appliquer SoftResourceLimits sur les descripteurs avant le RSS—les échecs EMFILE sont plus nets que les fuites graduelles.
- Promouvoir vers Hong Kong production seulement après 24 h propres en préprod.
- Miroiter les deltas plist vers Singapour et les US avec des chiffres régionaux, pas des entiers copiés-collés.
- Câbler les alertes sur le même espace Grafana que l'article métriques du 11 mai pour que l'astreinte voie la dérivée RSS, pas seulement les octets absolus.
- Documenter le rollback : conservez la révision plist précédente dans git avec les IDs de runbook.
- Former les opérateurs chat à interpréter les bandeaux « passerelle en chauffe » lors des redémarrages volontaires.
Clés plist launchd qui influencent le comportement mémoire de Node
EnvironmentVariables est l'emplacement durable pour NODE_OPTIONS ; SoftResourceLimits complète les plafonds internes de Node en signalant tôt l'ordonnanceur noyau. Associez ThrottleInterval de l'article du 29 avril sur les boucles de crash pour que des relances agressives ne masquent pas les fuites sous-jacentes. N'importez pas uniquement via le shell—les LaunchAgents ignorent les profils zsh interactifs.
Lors d'éditions plist distantes sur SSH, écrivez de façon atomique : copie vers un chemin temporaire, validation plutil -lint, déplacement final puis paires launchctl bootout/bootstrap. Un XML à moitié écrit après une connexion coupée a causé plus d'incidents que de mauvais entiers, car launchd refuse de charger le service tout entier, laissant un silence jusqu'à ce que la supervision sonne.
Quand plusieurs passerelles partagent un mini (déconseillé mais fréquent en lab), préfixez les labels plist par équipe pour que la sortie launchctl print reste lisible en incident.
Corréler le journal unifié avec les symptômes mémoire visibles côté utilisateur
macOS n'imprime pas forcément « JavaScript heap out of memory » dans le même fichier que la stdout passerelle—collectez des prédicats de sous-système en parallèle des journaux JSONL passerelle. Étiquetez chaque échantillon avec les métadonnées de bail MacLogin (région + tag d'actif) pour que la revue post-incident dise si la pression mémoire JP était un outlier ou globale.
Si des opérateurs VNC partagent l'écran sur le mini, rappelez que les sessions GUI ajoutent leur propre empreinte mémoire—planifiez les investigations après avoir fermé les sessions Screen Sharing inactives selon votre politique VNC interne.
Complétions en streaming et batch fournisseur : consommateurs cachés de tas
De longues transcriptions d'outils conservées pour la relecture peuvent épingler plusieurs copies de chaînes similaires en old space. Lorsque le produit insiste pour conserver les transcriptions, déversez vers du JSONL compressé sur disque (rotation selon l'article du 28 avril) au lieu d'agrandir indéfiniment les caches en processus.
Croisez les paramètres de retry fournisseur avec le guide rate-limit / backoff—les requêtes en double en vol multiplient les tampons pendant les brownouts.
FAQ
Baisser le tas accélère-t-il le GC ? Parfois une old generation plus petite laisse V8 collecter plus vite, mais le plus souvent vous augmentez seulement la fréquence du GC et brûlez du CPU sans réduire les objets retenus. Associez toujours les expériences de tas à la latence p95 des outils, au p99 d'accusé de réception webhook et aux graphiques de saturation CPU ; si la latence empire pendant que le RSS baisse, vous avez resserré la mauvaise variable—revenez en arrière avant le trafic week-end.
Le Japon et les US doivent-ils partager un même modèle de plist ? Partagez le squelette structurel—clés, commentaires, ordre ThrottleInterval—mais jamais les limites numériques tant que les deux régions n'affichent pas des histogrammes RSS qui se chevauchent pendant au moins une semaine ouvrée complète. Les fuseaux diffèrent ; un pic de maintenance à minuit US peut ressembler à une attaque sur les tableaux de Tokyo si vous oubliez d'annoter les déploiements.
Et si doctor reste vert pendant que le RSS croît ? doctor valide la forme de configuration, pas la dérive mémoire à long horizon. Ajoutez des alertes sur la dérivée du RSS, exportez heapUsed via tout hook métrique runtime exposé par votre version passerelle, et comparez aux diffs d'activation de plugins pour bissecter jusqu'à un bump npm précis.
Lien avec le swap sur Mac cloud ? macOS peut swapper des pages froides même sur Apple Silicon sous contention ; le swap masque les falaises RSS jusqu'à ce que la latence explose. Préférez des plafonds RSS explicites avec alertes au « laissons le swap nous sauver », surtout lorsque des opérateurs VNC consomment des pools mémoire proches du GPU.
Pourquoi le Mac mini M4 convient aux passerelles OpenClaw conscientes de la mémoire
L'architecture mémoire unifiée Apple Silicon M4 réduit la surcharge de copie lorsque la passerelle, les sidecars TLS et les agents d'observabilité coexistent sur un seul mini physique—crucial lorsque vous plafonnez le RSS volontairement. L'empreinte MacLogin HK, JP, KR, SG et US permet de placer des passerelles dimensionnées mémoire à côté du plan de contrôle chat qui déclenche les exécutions d'outils les plus lourdes, évitant la tentation d'« étirer le tas » à cause de la latence transocéanique.
L'efficacité M4 laisse aussi une marge pour des sessions Xcode ponctuelles lorsque l'équipe doit reproduire un chemin d'outil uniquement GUI sans migrer toute la charge vers un portable sous un bureau. Les ingénieurs qui ne reproduisent pas les fuites en local désactivent souvent les limites « juste une heure », annulant des semaines de gouvernance.
La location rend ces expériences réversibles : instantané d'état, resserrement des limites, observation une semaine, retour à des paliers plus grands via les tarifs sans comité d'achat pour du bare metal jetable après pilote.
Quand vous passez du pilote à la production, consolidez la documentation wiki interne avec des liens vers ce runbook, l'article Prometheus et le guide VNC pour que les opérateurs observent la mémoire visuellement lorsque les métriques CLI restent ambiguës.
Dimensionnez les passerelles avant le prochain week-end OOM
Louez de l'Apple Silicon à HK, JP, KR, SG ou US avec la marge pour sidecars Prometheus, l'historique git des plists launchd et les archives doctor.