From 64f4a200722353cb1ac167a44f1347d0e7f1f5bb Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 26 Jun 2026 17:36:05 -0400 Subject: [PATCH] granja: watchdog purga caches Go cuando disco >=82% El 'go mod vendor' acumula GOMODCACHE (~/go/pkg/mod) sin tope: una tanda Go grande lo llevo a 31G y lleno el disco de 80G -> I/O-wait disparo el load a 23 (cuello real, no CPU/RAM). El watchdog ahora purga 'go clean -modcache/-cache' cuando el disco supera DISK_HIGH% (def 82). El vendor/ local de cada receta ya tiene lo necesario; si pisa un vendor en curso, esa receta reintenta. Co-Authored-By: Claude Opus 4.8 --- scripts/farm/farm-worker-loop.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/farm/farm-worker-loop.sh b/scripts/farm/farm-worker-loop.sh index e47661f2..7ac297ea 100755 --- a/scripts/farm/farm-worker-loop.sh +++ b/scripts/farm/farm-worker-loop.sh @@ -17,6 +17,12 @@ IDLE_SLEEP="${IDLE_SLEEP:-300}" # --- watchdog de disco: cada 3 min borra work/sources/* que ningún bwrap activo bind-monta # (seguro: sellada=store CAS, en-cola=se re-extrae sola). Evita que el vendoring llene el disco. +# Además, si el disco supera DISK_HIGH%, purga los CACHES Go (GOMODCACHE ~/go/pkg/mod + gocache): +# el `go mod vendor` de las recetas Go acumula ahí decenas de GB sin tope (el vendor/ local de cada +# receta ya tiene lo que el build necesita; el modcache sólo se usa DURANTE el vendor). Si la purga +# pisa un vendor en curso, esa receta reintenta el próximo ciclo (cache-hit el resto). Sin esto, una +# tanda Go grande llena el disco de 80G y el I/O-wait dispara el load (cuello real, no CPU/RAM). +DISK_HIGH="${DISK_HIGH:-82}" ( while :; do sleep 180 @@ -26,6 +32,11 @@ IDLE_SLEEP="${IDLE_SLEEP:-300}" printf '%s\n' "$active" | grep -qxF "$dd" && continue rm -rf "$dd" done + use=$(df --output=pcent "$HAMMER_DIR" 2>/dev/null | tr -dc '0-9') + if [ -n "$use" ] && [ "$use" -ge "$DISK_HIGH" ]; then + echo "$(date -u +%FT%TZ) watchdog: disco ${use}% ≥ ${DISK_HIGH}% ⇒ purgo caches Go" + go clean -modcache 2>/dev/null; go clean -cache 2>/dev/null + fi done ) &