#!/usr/bin/env bash ## detect-memory-litespeed.sh — sibling to detect-memory.sh. ## Computes LSAPI_CHILDREN + extprocessor memSoftLimit/memHardLimit from ## container memory cap. Sourced by entrypoint-litespeed.sh. ## ---- container memory detection (mirrors detect-memory.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 (LSAPI workers get the lion's share) ---- OS_RESERVE_MB=50 OLS_RESERVE_MB=40 # OpenLiteSpeed daemon footprint DEV_OVERHEAD_MB=0 if [ "${environment:-PROD}" = "DEV" ]; then DEV_OVERHEAD_MB=125 fi AVAILABLE_MB=$((CONTAINER_MEMORY_MB - OS_RESERVE_MB - OLS_RESERVE_MB - DEV_OVERHEAD_MB)) if [ "$AVAILABLE_MB" -lt 60 ]; then AVAILABLE_MB=60 fi ## ---- LSAPI children (analogous to PHP_FPM_MAX_CHILDREN) ---- ## LSAPI is more memory-efficient than FPM; estimate 96 MB / worker ## (vs 128 MB for FPM after the 2026-06-01 bump). Floor 2, cap 50. LSPHP_WORKER_ESTIMATE_MB=${LSPHP_WORKER_ESTIMATE_MB:-96} 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 knobs — site-pool-env.php still passes FPM_MAX_CHILDREN ## for backward compat, so prefer LSAPI_CHILDREN if set, else FPM_MAX_CHILDREN, ## else the calculated value. LSAPI_CHILDREN=${LSAPI_CHILDREN:-${FPM_MAX_CHILDREN:-$calc_lsapi_children}} ## extprocessor mem limits — total LSAPI heap should fit AVAILABLE_MB with ## some breathing room. Soft = budget/children, hard = soft * 1.5, both capped ## at 2047 (OLS interprets > 2047 oddly in some 1.x builds). LSAPI_MEM_SOFT=$((AVAILABLE_MB / LSAPI_CHILDREN)) if [ "$LSAPI_MEM_SOFT" -lt 64 ]; then LSAPI_MEM_SOFT=64; fi if [ "$LSAPI_MEM_SOFT" -gt 2047 ]; then LSAPI_MEM_SOFT=2047; fi LSAPI_MEM_HARD=$((LSAPI_MEM_SOFT * 3 / 2)) if [ "$LSAPI_MEM_HARD" -gt 2047 ]; then LSAPI_MEM_HARD=2047; fi export CONTAINER_MEMORY_MB LSAPI_CHILDREN LSAPI_MEM_SOFT LSAPI_MEM_HARD