#!/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