2026 Mac Mini loué 7×24 : matrice décisionnelle — rotation des journaux lz4 et zstd, nice I/O, seuils inode et disque pour lots longs
Les équipes qui louent un Mac Mini pour des charges 7×24 très journalisées accumulent souvent JSONL, traces passerelle et stderr workers sur un seul volume APFS jusqu'à ce que la rotation, la compression lz4 ou zstd et la pression inode volent discrètement de la réactivité au tail comme au SSH interactif — une situation que l'on résume souvent par « disque encore vert, mais métadonnées déjà tendues ».
Matrice, seuils et extraits newsyslog / logrotate / launchd pour un hôte Apple Silicon loué. Liens utiles : FAQ APFS, launchd & nice I/O, runbook journaux nuit, files 7×24.
Trois douleurs des hôtes loués très verbeux
- Pics CPU post-rotation. Un
zstdagressif rivalise avec les workers batch sur les mêmes cœurs efficaces. - Falaises d'inodes. Des milliers de petits fichiers
.log.Népuisent les métadonnées avant quedf -hne paraisse critique. - SSH qui « traîne ». Sans nice ni LowPriorityIO, les hooks de compression volent la priorité disque et gênent la console interactive.
Matrice codecs : choisir une ligne avant d'optimiser
Mesurez une tranche avec /usr/bin/time sur APFS.
| Codec | Posture CPU | Posture taille | Cas d'usage |
|---|---|---|---|
lz4 -1 |
Très faible | Réduction modérée | Files toujours actives, compression « légère » avant envoi objet |
zstd -3 |
Basse à moyenne | Bonne densité | Voie de nuit par défaut sur Apple Silicon M4 loué lorsque le disque serre |
zstd -9 |
Élevée | Archives denses | Fenêtre maintenance unique, un seul gros écrivain, surveillance thermique |
Niveaux de compression et occupation CPU
Les niveaux sont des contrats : un cœur saturé sur un Mac Mini loué trahit souvent la mauvaise ligne.
| Bande de niveau | Jaune CPU (planifier) | Rouge CPU (agir) |
|---|---|---|
| lz4 rapide | CPU utilisateur > 40 % pendant 5 min avec SLA batch actif | > 70 % soutenu et latence en hausse |
| zstd 3 à 6 | Un cœur > 60 % pendant 10 min | Pression thermique ou watchdog qui redémarre le service |
| zstd 7 et plus | Chevauchement wall-clock avec le batch principal | Interdit sans fenêtre maintenance explicite et owner d'astreinte |
Fréquence de rotation et dimensionnement des tranches
Taille pour les rafales ; heure pour les démons bavards.
- Taille. Viser 50 à 200 Mo par fichier courant pour garder des append prévisibles.
- Temps. Passerelles bruyantes en horaire, workers en tranche six heures, archives froides au quotidien.
- Rétention locale. 7 à 14 générations sur SSD, puis déport vers stockage objet conforme à votre politique.
Couplage avec launchd (nice I/O et cadence)
Regroupez compression et upload ; Nice 10–19 et LowPriorityIO vrai pour ménager SSH.
<key>Nice</key>
<integer>12</integer>
<key>LowPriorityIO</key>
<true/>
<key>ThrottleInterval</key>
<integer>120</integer>
Exemple : nice -n 12 zstd -q -3 /var/log/runmini/app.log.0.
Actions sur lignes d'eau disque et inode
Automatisez avant les erreurs métadonnées ; avec Valkey, voir matrice disque Valkey.
| Signal | Jaune (planifier) | Rouge (agir) |
|---|---|---|
| Pourcentage d'espace libre APFS | Sous 15 % : rogner rétention, suspendre écrivains non critiques | Sous 10 % : stopper nouvelles rotations jusqu'à vidage upload ; sous 5 % : conserver seulement points de contrôle |
| Taux d'utilisation inodes | Au-dessus de 70 % : planifier fusion ou archive | Au-dessus de 85 % : bloquer création de micro-fichiers minute |
| Profondeur file compression | > 3 jobs post-rotation en attente | > 6 jobs : repasser automatiquement en lz4 seul jusqu'à vidage |
Extraits newsyslog, logrotate et bash
newsyslog natif ; logrotate souvent via Homebrew. Vérifiez man newsyslog.conf pour les drapeaux Z/G.
Fragment newsyslog.conf
# /etc/newsyslog.d/runmini-logs.conf — rotation taille ; compression lz4/zstd via launchd après HUP
/var/log/runmini/app.log user:staff 640 14 102400 * ZG
Fragment logrotate (zstd)
/var/log/runmini/app.log {
size 128M
rotate 14
compress
compresscmd /usr/bin/zstd
compressext .zst
compressoptions -3 -T1
delaycompress
postrotate
/usr/bin/nice -n 12 /usr/local/bin/envoi-tranche.sh "$1" || true
endscript
}
Script bash de tranche (lz4)
LOG=/var/log/runmini/app.log
TS=$(date -u +%Y%m%dT%H%M%SZ)
mv "$LOG" "$LOG.$TS"
/usr/bin/nice -n 12 /usr/bin/lz4 -q -f "$LOG.$TS" "$LOG.$TS.lz4"
/usr/bin/install -m 640 /dev/null "$LOG"
/bin/kill -HUP "$(cat /var/run/runmini.pid)"
Cinq étapes opérables
- Mesurer débit et inodes (
df -g,df -i). - Choisir codec, taille max et générations dans newsyslog ou logrotate.
- Plist Nice + LowPriorityIO pour compression et upload.
- Jaune : file > trois jobs → post-rotation lz4 seul ; rouge : pause rotation et drain objet.
- Tabletop après mise à jour macOS.
Repères : tranche 50–200 Mo, rétention 7–14, inode 70/85 %, disque libre 15/10/5 %, nice 12, zstd -3, file rouge 6 jobs.
FAQ
- La nuit doit-elle compresser en lz4 ou zstd sur un seul hôte loué ?
- lz4 lorsque la marge CPU est courte. zstd niveau trois lorsque le disque serre et que LowPriorityIO protège la console.
- Quelle fréquence pour des jobs 7×24 bruyants ?
- Combinez déclencheur taille et fenêtre horaire ; gardez toujours une sonde sur
df -i. - Quand bloquer les petits écrivains à cause des inodes ?
- Au-delà de quatre-vingt-cinq pour cent d'inodes utilisés, stoppez les créations minute jusqu'à archivage complet.
Achat versus location (note brève)
L'achat fige le capex ; louer lisse la trésorerie et permet de monter en SSD quand les journaux grossissent — voyez Tarification et Achat.
Choisir un nœud Mac pour journaux batch 7×24
RunMini : marge SSD pour tranches. Accueil, tarifs, aide, blog ; files 7×24, runbook logs.
Conservez un signet sur l'accueil et le blog : les mises à jour macOS déplacent parfois les défauts de newsyslog.