Skip to content

Instantly share code, notes, and snippets.

@oppara
Created September 24, 2023 13:39
Show Gist options
  • Save oppara/e1a5b798db6bacd8dee70c084b3c677c to your computer and use it in GitHub Desktop.
Save oppara/e1a5b798db6bacd8dee70c084b3c677c to your computer and use it in GitHub Desktop.
ApacheのMPMの設定において、MaxClientsに設定できる上限値を計算するシェルスクリプト
#!/bin/bash
_PIDS=(`pgrep httpd`)
_PROC_COUNT=${#_PIDS[@]}
_MEMORY_TOTAL=`free | grep Mem | awk '{print $2;};'`
#_MEMORY_FREE=`vmstat -a | awk 'NR==3{print $4+$5;};'`
_RSS_TOTAL=0
_SHARED_TOTAL=0
for _PID in ${_PIDS[@]}; do
_SMAPS=`cat /proc/$_PID/smaps`
_RSS=`echo "$_SMAPS" | grep Rss | awk '{value += $2} END {print value;};'`
_SHARED=`echo "$_SMAPS" | grep Shared | awk '{value += $2} END {print value;};'`
_RSS_TOTAL=`expr $_RSS_TOTAL + $_RSS`
_SHARED_TOTAL=`expr $_SHARED_TOTAL + $_SHARED`
done
_RSS_AVERAGE=`expr $_RSS_TOTAL / $_PROC_COUNT`
_SHARED_AVERAGE=`expr $_SHARED_TOTAL / $_PROC_COUNT`
_PROC_MEMORY=`expr $_RSS_AVERAGE - $_SHARED_AVERAGE`
#_MIN_MAX_CLIENTS=`expr $_MEMORY_FREE / $_PROC_MEMORY`
_MAX_MAX_CLIENTS=`expr $_MEMORY_TOTAL / $_PROC_MEMORY`
echo "Memory Total / (Rss Average - Shr Average) = $_MEMORY_TOTAL / ($_RSS_AVERAGE - $_SHARED_AVERAGE)"
#echo "Memory Free / (Rss Average - Shr Average) = $_MEMORY_FREE / ($_RSS_AVERAGE - $_SHARED_AVERAGE)"
#echo "MaxClients = $_MIN_MAX_CLIENTS ~ $_MAX_MAX_CLIENTS"
echo "MaxClients = $_MAX_MAX_CLIENTS"
exit 0
@oppara
Copy link
Author

oppara commented Sep 24, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment