Apacheチューニング: MaxClientsに設定できる上限値を計算する
ApacheのMPMの設定において、MaxClientsに設定できる上限値を計算するシェルスクリプトを作成しました。
参考にさせていただいたのは以下のページです。
- 減り続けるメモリ残量! 果たしてその原因は!?
- Linux のプロセスが Copy on Write で共有しているメモリのサイズを調べる
- apacheのMaxClientsの適正値調べた
- apacheのMaxClientを算出するスクリプトを作った
PHPだとPHPを導入していない環境で困るのでシェルスクリプトとして書きました。
- get_max_clients.sh
#!/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
使い方は以下の通りです。
sudo ./get_max_clients.sh
実際には、OSやその他のプロセスが使用するメモリもあるため、総メモリ量ではなく、空きメモリ量を使用したほうがいいかもしれません。
(コメントアウトしている部分は、空きメモリ量からMaxClientsを算出しています。ただし、起動済みのApacheプロセスが使用しているメモリ量を考慮していないので不完全です。)
トラックバック (0)
この記事へのトラックバックはまだありません。
コメント (0)
この記事へのコメントはまだありません。