Apacheチューニングのためのメモリ使用量計算
「/proc/(pid)/status」のメモリサイズからメモリ消費量をリストアップするスクリプトを準備した。
「サーバ/インフラを支える技術」に載っている、id:naoyaさんの共有しているメモリのサイズを計算するスクリプトとあわせて、エクセルに落とし込んでごにょごにょと計測してみる。
http://d.hatena.ne.jp/naoya/20080212/1202830671
http://archive.linux.or.jp/JM/html/LDP_man-pages/man5/proc.5.html
[www]~ $ cat memory_size.sh #!/bin/sh GREP="/bin/grep" AWK="/bin/awk" PRINTF="/usr/bin/printf" if [ $# -lt 1 ]; then echo "usage: ${0} [pid ...]" 1>&2 exit 100 fi $PRINTF "PID\tRSS\t(peak)\tVM\t(peak)\n" for p in $@ do status="/proc/${p}/status" if [ -f $status ]; then rsssize=`$GREP '^VmRSS:' $status | $AWK '{print $2}'` rsspeak=`$GREP '^VmHWM:' $status | $AWK '{print $2}'` vmsize=`$GREP '^VmSize:' $status | $AWK '{print $2}'` vmpeak=`$GREP '^VmPeak:' $status | $AWK '{print $2}'` $PRINTF \ "%d\t%d\t(%d)\t%d\t(%d)\n" \ $p \ $rsssize \ $rsspeak \ $vmsize \ $vmpeak fi done
for p in `pgrep httpd`; do grep "^VmHWM:" /proc/$p/status |awk '{print $2}'; done
で、すみそうな気も。
[www]~ $ ./memory_size.sh `pgrep httpd` [www]~ $ sudo ./shared_memory_size.pl `pgrep httpd`
からエクセルにデータをもっていて、ごにょごにょと(古いプロセスと新しいプロセスのデータは破棄して、平均を算出、共有を考慮した消費量を予測)……。
(Apache+CakePHPのWebサービスを計測して)おおざっぱに、↓のような数値が算出できた。いまいち計算結果に自信がもてないけど……。
- 実メモリ上ページサイズ
- 平均26.77MB
- 最大31.38MB
- 最小20.9MB
- 実メモリ上ページサイズ(ピーク)
- 平均31.34MB
- 最大32.91MB
- 最小30.21MB
- 共有率
- 平均32%
- 最大41%
- 最小27%
計算結果から、Apacheプロセスのメモリ使用量を32MBと想定、平均して32%程度のメモリを共有するものとして、Apacheプロセスが消費するメモリの予想は平均21.76MB程度か。
Webサーバには4GBを搭載しているので、OSが512MB程度占有するものとして、「(4GB - 512MB) / 21.76MB」でApacheに割り当てられそうなプロセス数は164と算出できる。
余裕をもたせるとして、100〜150程度の設定が妥当そうか。