diff --git a/scripts/with-memory-cap.sh b/scripts/with-memory-cap.sh index 7b5690bb52..ec7dacf66b 100755 --- a/scripts/with-memory-cap.sh +++ b/scripts/with-memory-cap.sh @@ -118,6 +118,13 @@ systemd_cmd=() # starten. De markering maakt dat afdwingbaar in next.config.ts. export CMS_MEMORY_CAPPED=1 +# Gebruik hoogstens de helft van de cores, zodat de machine niet op 100% CPU +# piekt, maar behoud voldoende parallelle kracht op (Ryzen) hosts. +cpu_count="$(nproc 2>/dev/null || echo 1)" +worker_cores=$((cpu_count / 2)) +[ "$worker_cores" -lt 1 ] && worker_cores=1 +cpu_affinity="0-$((worker_cores - 1))" + # Echt proberen, niet alleen uitzoeken of het bestand bestaat: `systemd-run` # zonder rechten faalt met "Access denied", en dat moet dan een nette # terugval naar ulimit worden in plaats van een kapotte build. @@ -174,7 +181,7 @@ run_systemd() { # expliciet: deze host heeft geen swap. local high=$((effective * 95 / 100)) echo "[mem-cap] systemd cgroup MemoryHigh=$((high / 1024 / 1024))MB MemoryMax=$((effective / 1024 / 1024))MB MemorySwapMax=0: $*" >&2 - exec "${systemd_cmd[@]}" -p "MemoryHigh=$high" -p "MemoryMax=$effective" -p "MemorySwapMax=0" -p "CPUAffinity=0" "$@" + exec "${systemd_cmd[@]}" -p "MemoryHigh=$high" -p "MemoryMax=$effective" -p "MemorySwapMax=0" -p "CPUAffinity=$cpu_affinity" "$@" } run_ulimit() { @@ -186,7 +193,7 @@ run_ulimit() { echo "[mem-cap] ulimit -v $virtual_kb werd geweigerd" >&2 return 1 } - exec taskset -c 0 "$@" + exec taskset -c "$cpu_affinity" "$@" } run_refuse() { @@ -197,7 +204,7 @@ run_refuse() { run_opted_out() { echo "[mem-cap] WAARSCHUWING: plafond bewust uitgeschakeld, dit commando kan de machine laten OOM-killed worden: $*" >&2 - exec taskset -c 0 "$@" + exec taskset -c "$cpu_affinity" "$@" } case "$backend" in