From f46351999813111ef8a120bc0a4b855f48d9a1b9 Mon Sep 17 00:00:00 2001 From: jknapp Date: Tue, 2 Jun 2026 18:54:28 -0700 Subject: [PATCH] =?UTF-8?q?tune(litespeed):=20bump=20LSPHP=5FWORKER=5FESTI?= =?UTF-8?q?MATE=5FMB=20115=20=E2=86=92=20130?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 115 was set from idle-state per-worker memory. Active workers on heavy WP/Divi grow to ~130-150 MB (shmem + anon + file), and the 115 formula gave brain-jar.com CHILDREN=8 at 1 GiB — which produced 142 OOM-kills overnight because there was zero headroom once page renders started. 130 backs off slightly on the bigger sites: 512 MiB: 3 workers (unchanged) 1 GiB: 7 workers (was 8 — brain-jar's failure point) 1.5 GiB: 11 workers (was 12) 2 GiB: 15 workers (was 17) 4 GiB: 30 workers (was 33) Per-site FPM_MAX_CHILDREN override still wins for sites that need tighter caps regardless of formula default. Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/detect-memory-litespeed.sh | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/scripts/detect-memory-litespeed.sh b/scripts/detect-memory-litespeed.sh index f59d5b8..f75274a 100644 --- a/scripts/detect-memory-litespeed.sh +++ b/scripts/detect-memory-litespeed.sh @@ -49,14 +49,22 @@ fi ## ---- LSAPI children (analogous to PHP_FPM_MAX_CHILDREN) ---- ## Per the 2026-06-02 cac-litespeed memory-sizing finding (vantagehealth ## OOM-spawn loop at 512 MB cap): each lsphp worker carries ~115 MB -## shmem-rss which is RSS-accounted per worker (vs cac-fpm's COW-shared -## fork model). Real-world worker budget ≈ 115 MB shmem + ~50-100 MB anon -## that scales with workload. 115 MB is the safe per-worker estimate for -## the divisor; floor at 2, cap at 50. +## shmem-rss + ~25 MB anon + ~10 MB file ≈ 130-150 MB real cgroup cost +## per worker on heavy WP workloads. shmem is RSS-accounted per worker +## (vs cac-fpm's COW-shared fork model) so the cost is real per cgroup, +## not just per process. ## -## Sub-512 MB containers are unsafe for dynamic WP on OLS per the memory -## note — the floor of 2 workers still applies but it'll be cap-marginal. -LSPHP_WORKER_ESTIMATE_MB=${LSPHP_WORKER_ESTIMATE_MB:-115} +## 115 (the previous default) was set from idle-state measurements and +## ran brain-jar.com into 142 OOM-kills at 1 GiB on 2026-06-02 night — +## the formula computed CHILDREN=8, which left zero headroom once Divi +## page renders started growing worker anon. Bumped to 130 to track the +## active per-worker cost; gives slightly fewer workers but real headroom. +## +## Sub-512 MB containers remain unsafe for dynamic WP on OLS — the floor +## of 2 workers still applies but it'll be cap-marginal. Per-site override +## via FPM_MAX_CHILDREN env var (panel edit-site UI) overrides this for +## sites where the default isn't right for their workload. +LSPHP_WORKER_ESTIMATE_MB=${LSPHP_WORKER_ESTIMATE_MB:-130} calc_lsapi_children=$((AVAILABLE_MB / LSPHP_WORKER_ESTIMATE_MB)) if [ "$calc_lsapi_children" -lt 2 ]; then