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 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
) &
|
||||
|
||||
|
||||
Reference in New Issue
Block a user