Apacheチューニング: MaxClientsに設定できる上限値を計算する

ApacheのMPMの設定において、MaxClientsに設定できる上限値を計算するシェルスクリプトを作成しました。

参考にさせていただいたのは以下のページです。

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)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/221/trackback/
この記事のURI
http://dxd8.com/archives/221/