76 lines
2.7 KiB
Bash
76 lines
2.7 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
## detect-memory-lsphp.sh — sibling of detect-memory-litespeed.sh for the
|
||
|
|
## cac-lsphp DETACHED sidecar (lsphp -b, no local webserver).
|
||
|
|
##
|
||
|
|
## Computes PHP_LSAPI_CHILDREN from the container memory cap. Identical worker
|
||
|
|
## arithmetic to detect-memory-litespeed.sh, with ONE difference: there is no
|
||
|
|
## OpenLiteSpeed daemon in this container (OLS runs in the shared-ols tier), so
|
||
|
|
## the ~40 MB OLS_RESERVE is dropped — every MB above the OS reserve goes to
|
||
|
|
## lsphp workers. Sourced by entrypoint-lsphp.sh.
|
||
|
|
|
||
|
|
## ---- container memory detection (mirrors detect-memory-litespeed.sh) ----
|
||
|
|
CONTAINER_MEMORY_BYTES=""
|
||
|
|
|
||
|
|
if [ -f /sys/fs/cgroup/memory.max ]; then
|
||
|
|
val=$(cat /sys/fs/cgroup/memory.max 2>/dev/null)
|
||
|
|
if [ "$val" != "max" ] && [ -n "$val" ]; then
|
||
|
|
CONTAINER_MEMORY_BYTES=$val
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -z "$CONTAINER_MEMORY_BYTES" ] && [ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
|
||
|
|
val=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes 2>/dev/null)
|
||
|
|
if [ -n "$val" ] && [ "$val" -lt 8589934592000 ] 2>/dev/null; then
|
||
|
|
CONTAINER_MEMORY_BYTES=$val
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -z "$CONTAINER_MEMORY_BYTES" ] && [ -f /proc/meminfo ]; then
|
||
|
|
mem_kb=$(awk '/^MemTotal:/ {print $2}' /proc/meminfo)
|
||
|
|
if [ -n "$mem_kb" ]; then
|
||
|
|
CONTAINER_MEMORY_BYTES=$((mem_kb * 1024))
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -z "$CONTAINER_MEMORY_BYTES" ]; then
|
||
|
|
CONTAINER_MEMORY_BYTES=$((512 * 1024 * 1024))
|
||
|
|
fi
|
||
|
|
|
||
|
|
CONTAINER_MEMORY_MB=$((CONTAINER_MEMORY_BYTES / 1024 / 1024))
|
||
|
|
|
||
|
|
## ---- budget split (all non-OS memory is the lsphp workers' to use) ----
|
||
|
|
OS_RESERVE_MB=50
|
||
|
|
DEV_OVERHEAD_MB=0
|
||
|
|
if [ "${environment:-PROD}" = "DEV" ]; then
|
||
|
|
DEV_OVERHEAD_MB=125
|
||
|
|
fi
|
||
|
|
|
||
|
|
AVAILABLE_MB=$((CONTAINER_MEMORY_MB - OS_RESERVE_MB - DEV_OVERHEAD_MB))
|
||
|
|
if [ "$AVAILABLE_MB" -lt 60 ]; then
|
||
|
|
AVAILABLE_MB=60
|
||
|
|
fi
|
||
|
|
|
||
|
|
## ---- LSAPI children ----
|
||
|
|
## Same ~130 MB/worker estimate as cac-litespeed (see detect-memory-litespeed.sh
|
||
|
|
## for the vantagehealth/brain-jar OOM history that set this). Detached lsphp
|
||
|
|
## has the SAME per-worker shmem-RSS profile as in-container lsphp — splitting
|
||
|
|
## the webserver out doesn't change lsphp's memory model, only removes the OLS
|
||
|
|
## daemon footprint from the budget.
|
||
|
|
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
|
||
|
|
calc_lsapi_children=2
|
||
|
|
fi
|
||
|
|
if [ "$calc_lsapi_children" -gt 50 ]; then
|
||
|
|
calc_lsapi_children=50
|
||
|
|
fi
|
||
|
|
|
||
|
|
## Per-site override precedence — the WHP panel (site-pool-env.php) passes the
|
||
|
|
## customer's override as LSAPI_CHILDREN and/or FPM_MAX_CHILDREN; either wins
|
||
|
|
## over the calculated default. entrypoint-lsphp.sh exports the result as
|
||
|
|
## PHP_LSAPI_CHILDREN (the name lsphp -b reads).
|
||
|
|
LSAPI_CHILDREN=${LSAPI_CHILDREN:-${FPM_MAX_CHILDREN:-$calc_lsapi_children}}
|
||
|
|
|
||
|
|
export CONTAINER_MEMORY_MB LSAPI_CHILDREN
|