#!/bin/bash
INPUT_FILE="./input.json"
pm() {
env=$(jq -r '.env' "$INPUT_FILE")
constant_traffic=$(jq -r '.constant_traffic // false' "$INPUT_FILE")
if [[ "$env" == "dev" ]]; then
echo ' pm: "ondemand"'
elif [[ "$env" == "prod" ]]; then
[[ "$constant_traffic" == "true" ]] && echo ' pm: "static"' || echo ' pm: "dynamic"'
else
echo "possible values for 'env': dev, prod"
echo "possible values for 'constant_traffic': true, false"
fi
}
pm_max_children() {
maximum_active_process_across_pods_max=$(jq -r '.maximum_active_process_across_pods_max' "$INPUT_FILE")
process_memory_usage_max=$(jq -r '.process_memory_usage_max' "$INPUT_FILE")
if ! [[ "$maximum_active_process_across_pods_max" =~ ^[1-9][0-9]*$ ]] || ! [[ "$process_memory_usage_max" =~ ^[1-9][0-9]*$ ]]; then
echo "possible values for 'maximum_active_process_across_pods_max': positive integer (e.g. 40, 50, 100)"
echo "possible values for 'process_memory_usage_max': average memory per PHP process in MB (e.g. 32, 64, 128)"
return
fi
estimated_total_memory=$(( process_memory_usage_max * maximum_active_process_across_pods_max ))
estimated_total_with_overhead=$(awk "BEGIN { printf \"%.0f\", $estimated_total_memory * 1.2 }")
max_children=$(awk "BEGIN { printf \"%.0f\", $estimated_total_with_overhead / $process_memory_usage_max }")
echo " pm.max_children: $max_children"
}
pm_max_requests() {
served_request_count_mean=$(jq -r '.served_request_count_mean // 0' "$INPUT_FILE")
if ! [[ "$served_request_count_mean" =~ ^[0-9]+$ ]]; then
echo " pm.max_requests: 0"
echo "possible values for 'served_request_count_mean': positive integer (e.g. 5, 150, 250)"
return
fi
if (( served_request_count_mean < 10 )); then
echo " pm.max_requests: 200"
elif (( served_request_count_mean < 200 )); then
echo " pm.max_requests: 500"
else
echo " pm.max_requests: 1000"
fi
}
pm_dynamic_extra_settings() {
pm_mode=$(pm | awk -F\" '{print $2}')
if [[ "$pm_mode" != "dynamic" ]]; then
return
fi
max_children=$(pm_max_children | awk '{print $2}')
if ! [[ "$max_children" =~ ^[1-9][0-9]*$ ]]; then
return
fi
start_servers=$(awk "BEGIN { printf \"%.0f\", $max_children * 0.2 }")
min_spare_servers=$start_servers
proposed_max_spare_servers=$((start_servers + 10))
max_spare_servers=$(( proposed_max_spare_servers < max_children ? proposed_max_spare_servers : max_children ))
echo " pm.start_servers: $start_servers"
echo " pm.min_spare_servers: $min_spare_servers"
echo " pm.max_spare_servers: $max_spare_servers"
}
pm
pm_max_children
pm_max_requests
pm_dynamic_extra_settings
{
"env": "prod",
"constant_traffic": "false",
"maximum_active_process_across_pods_max": 123,
"process_memory_usage_max": 6,
"served_request_count_mean": 2590
}