<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Extreme Pattern: httpmark.mo</title>
    <link>http://blog.extremepattern.com/articles/2006/09/17/httpmark-mo</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>enjoy</description>
    <item>
      <title>httpmark.mo</title>
      <description>&lt;h3&gt;有些事要先知道&lt;/h3&gt;


	&lt;p&gt;部落格的文件發布時間不一致，有時寫的時候並沒有考慮到後來的發展，所以文件往往缺乏一貫與完整性，為避免看的人一頭霧水，於是在文件前稍微介紹一下這個練習的來龍去脈。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;如何使用 vmplayer 玩 &lt;span class="caps"&gt;ISO&lt;/span&gt; 檔請參考 &lt;a href="/articles/2006/09/01/damn-small-linux-in-vmware-player"&gt;dsl in vmplayer&lt;/a&gt; &lt;/li&gt;
		&lt;li&gt;slax 在 vmplayer 上玩請參考 &lt;a href="/articles/2006/09/05/slax-popcorn-5-1-8-rc-in-vmplayer"&gt;Slax popcorn in vmplayer&lt;/a&gt; &lt;/li&gt;
		&lt;li&gt;gcin 中文輸入請參考 &lt;a href="/articles/2006/09/08/gcin-1-2-4-in-slax-popcorn-5-1-8"&gt;gcin in slax popcorn&lt;/a&gt; &lt;/li&gt;
		&lt;li&gt;jre/apr-tcnative/tomcat 請參考 &lt;a href="/articles/2006/09/11/native-tomcat-in-slax"&gt;Native Tomcat in Slax&lt;/a&gt; &lt;/li&gt;
		&lt;li&gt;網頁測試 autobench.mo 請參考 &lt;a href="/articles/2006/09/13/httperf-and-autobench-in-slax"&gt;httperf and autobench&lt;/a&gt;&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;源起&lt;/h3&gt;


	&lt;p&gt;之前包 autobench.mo 為求方便，只有加個輸出單張的 &lt;span class="caps"&gt;PNG&lt;/span&gt; 的 script  而已，這次想要修改一下輸出樣式，可以輸出一個簡易 &lt;span class="caps"&gt;HTML&lt;/span&gt; 報告，
這樣到底是要繼續改 bench2png 還是另外作 ? 這裡選擇另外作 shell script 來跑，因為 perl 不熟 :-)&lt;/p&gt;


	&lt;p&gt;要輸出 &lt;span class="caps"&gt;HTML&lt;/span&gt; 當然需要 &lt;span class="caps"&gt;HTTP&lt;/span&gt; 服務，內建要選小一點的，所以選 lighttpd 供測試與展示 &lt;span class="caps"&gt;HTML&lt;/span&gt; 使用。&lt;/p&gt;


	&lt;h3&gt;lighttpd inside&lt;/h3&gt;


	&lt;p&gt;注意編譯 lighttpd 期間需要 pcre 支援，安裝完並不需要這個 pcre。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;wget pcre; configure; make; checkinstall&lt;/li&gt;
		&lt;li&gt;wget lighttpd; configure; make; checkinstall&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;試運轉後發現 lighttpd 需要使用 sendfile 支援，而這個部份似乎有點問題，必須考量將 www 等目錄掛在 tmpfs 上。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;mkdir httpmark&lt;/li&gt;
		&lt;li&gt;installpkg -root httpmark ../httperf-0.8-i386-1.tgz&lt;/li&gt;
		&lt;li&gt;installpkg -root httpmark ../autobench-2.1.2-i386-1.tgz&lt;/li&gt;
		&lt;li&gt;installpkg -root httpmark ../lighttpd-1.4.11-i386-1.tgz&lt;/li&gt;
		&lt;li&gt;cd httpmark&lt;/li&gt;
		&lt;li&gt;mkdir -p usr/local/lighttpd/www/test&lt;/li&gt;
		&lt;li&gt;mkdir -p usr/local/lighttpd/logs&lt;/li&gt;
		&lt;li&gt;echo &amp;#8220;httpmark work&amp;#8221; &amp;gt; usr/local/lighttpd/www/index.html&lt;/li&gt;
		&lt;li&gt;echo &amp;#8220;httpmark test&amp;#8221; &amp;gt; usr/local/lighttpd/www/test/index.html&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;這裡預設會輸出 4 個圖檔，與 4 個 tsv 檔。&lt;/p&gt;


&lt;pre&gt;
&amp;lt;img src="hmark_1.png"/&amp;gt;
&amp;lt;a href="hmark_1.tsv.txt"&amp;gt;hmark_1.tsv&amp;lt;/a&amp;gt;
.....
&lt;/pre&gt;

	&lt;p&gt;同時放幾個 jpg 檔進去。test10k/test20k/test50k/test100k，同時把設定檔調一下。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cp /mnt/hda1/lighttpd-1.4.11/doc/lighttpd.conf usr/local/lighttpd/&lt;/li&gt;
		&lt;li&gt;cp /mnt/hda1/lighttpd-1.4.11/doc/rc.lighttpd usr/local/lighttpd/&lt;/li&gt;
		&lt;li&gt;cd usr/local/lighttpd/&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;接下來改 lighttpd 啟動檔， vi my.lighttpd 如下，主要是一開始劃出 tmpfs 來掛的要求必須滿足。&lt;/p&gt;


&lt;pre&gt;
#! /bin/sh
# Check lighttpd
LIGHTTPD_BIN=/usr/local/sbin/lighttpd
if [ ! -e $LIGHTTPD_BIN ]; then
        echo "ERROR : $LIGHTTPD_BIN DO NOT exist." 
        exit 0
fi
#
# check tmpfs for lighttpd
#
LIGHTTPD_HOME=/usr/local/lighttpd
LIGHTTPD_FS=/usr/local/tmpfs/lighttpd
target=`df -h | grep "$LIGHTTPD_FS"`
if [ "$target" == "" ]; then
        echo "Mount tmpfs in $LIGHTTPD_FS" 
        [ -e $LIGHTTPD_FS ] || mkdir -p $LIGHTTPD_FS
        mount tmpfs $LIGHTTPD_FS -t tmpfs -o size=24m
        mkdir -p $LIGHTTPD_FS/logs
        cp -r $LIGHTTPD_HOME/www/ $LIGHTTPD_FS
fi

LIGHTTPD_HOME=/usr/local/lighttpd
LIGHTTPD_CONF_PATH=$LIGHTTPD_HOME/lighttpd.conf

case "$1" in
    start)
        echo "Starting lighttpd..." 
        # check if lighttpd.pid file exists [mylighttpd.sh creates it.]
        if [ -e $LIGHTTPD_HOME/lighttpd.pid ] ; then
                pid=`cat $LIGHTTPD_HOME/lighttpd.pid`
                # check if process is still running
                if [ -d "/proc/$pid" ]; then
                        echo "lighttpd already running as process $pid.Stop it first.." 
                        exit 0
                fi
        fi
        $LIGHTTPD_BIN -f $LIGHTTPD_CONF_PATH &amp;#38;
        echo $! &amp;gt; $LIGHTTPD_HOME/lighttpd.pid
        ;;
    stop)
        echo "Shutting down lighttpd..." 
        if [ -e $LIGHTTPD_HOME/lighttpd.pid ] ; then
                pid=`pgrep lighttpd`
                kill $pid
                rm $LIGHTTPD_HOME/lighttpd.pid
        fi
        ;;
    restart)
        ## Stop the service and regardless of whether it was
        ## running or not, start it again.
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}" 
        exit 1
        ;;
esac

&lt;/pre&gt;

	&lt;p&gt;然後修改設定檔，將路徑指到 tmpfs 去。&lt;/p&gt;


	&lt;p&gt;vi usr/local/lighttpd/lighttpd.conf&lt;/p&gt;


&lt;pre&gt;
server.document-root        = "/usr/local/tmpfs/lighttpd/www/" 
server.errorlog             = "/usr/local/tmpfs/lighttpd/logs/lighttpd.error.log" 
accesslog.filename          = "/usr/local/tmpfs/lighttpd/logs/access.log" 
&lt;/pre&gt;

	&lt;p&gt;接下來重開機測試 lighttpd。&lt;/p&gt;


#dir2mo httpbench httpmark-0.1.mo
#reboot
	&lt;ol&gt;
	&lt;li&gt;uselivemod httpmark-0.1.mo&lt;/li&gt;
		&lt;li&gt;/usr/local/lighttpd/my.lighttpd start&lt;/li&gt;
		&lt;li&gt;netstat -at&lt;/li&gt;
		&lt;li&gt;check http://127.0.0.1/&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;gnuplot 的樣本檔&lt;/h3&gt;


	&lt;p&gt;建立一個 gnuplot 的樣本檔，可以先跑看看，然後到時候用 sed 換字就好。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1/work/httpmark&lt;/li&gt;
		&lt;li&gt;mkdir usr/local/httpmark&lt;/li&gt;
		&lt;li&gt;cd usr/local/httpmark&lt;/li&gt;
		&lt;li&gt;vi httpmark.plt&lt;/li&gt;
	&lt;/ol&gt;


&lt;pre&gt;
set terminal png small color
set key outside below
set key box
set grid
set output "results.png" 
set data style linespoints
set title "results.title" 
set xlabel "X Axis : dem_req_rate" 
set y2tics
set ytics nomirror
set y2label "Y2 Axis : Mbps" 
plot "results.tsv" using 1:2 every ::1 ti "req rate" , \
"results.tsv" using 1:3 every ::1 ti "conn rate" , \
"results.tsv" using 1:7 every ::1 ti "std_req_rate", \
"results.tsv" using 1:8 every ::1 ti "resp_time(ms)", \
"results.tsv" using 1:10 every ::1 ti "error", \
"results.tsv" using 1:($9*8/1024) every ::1 ti "net_io(Y2)" axis x1y2
&lt;/pre&gt;

	&lt;p&gt;關於 gnuplot 可以參考。&lt;/p&gt;


	&lt;p&gt;http://t16web.lanl.gov/Kawano/gnuplot/plot1-e.html#5.2
http://www.gnuplot.info/faq/faq.html
http://www.gentoo.org/doc/en/articles/l-awk1.xml?style=printable&lt;/p&gt;


	&lt;h3&gt;httpmark.sh&lt;/h3&gt;


	&lt;ol&gt;
	&lt;li&gt;vi httpmark.sh&lt;/li&gt;
		&lt;li&gt;chmod +x httpmark.sh&lt;/li&gt;
	&lt;/ol&gt;


&lt;pre&gt;
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
echo "httpbench runing...." 
echo "test : $1" 
echo "low rate : $2" 
echo "high rate : $3" 
echo "num call : $4" 
echo "num conn  : $5" 
echo "rate step : $6" 

#
# check autobench
#
abcmd=/usr/local/bin/autobench
if [ ! -e $abcmd ]; then
        echo "autobench is not install." 
        exit 0
fi
#
# autobench need conf file
#
exaconf=/usr/local/etc/autobench.conf
aconf=$HOME/.autobench.conf
[ ! -e "$aconf" ] &amp;#38;&amp;#38; cp $exaconf $aconf

#
# gnuplot template
#
HTTPMARK_HOME=/usr/local/httpmark
plt=$HTTPMARK_HOME/httpmark.plt
HTDOC=/usr/local/tmpfs/lighttpd/www
#
# run autobench
#
uri="/test" 
testfile="test10k.jpg" 
echo "Run autobench with num_call $4" 
tsvfile=hmark_$1.tsv
echo "tsv file : $tsvfile" 
pngfile=hmark_$1.png
echo "png file : $pngfile" 
title="hmark($testfile) n_call=$4,n_conn=$5" 
echo "title : $title" 
autobench --single_host --host1 127.0.0.1 \
 --port1 80 --uri1 $uri/$testfile --quiet \
 --low_rate $2 --high_rate $3 --rate_step $6 \
 --num_call $4 --num_conn $5 --timeout 5 \
 --file $tsvfile
# sed file
sed -e "s/results.tsv/$tsvfile/g" \
-e "s/results.png/$pngfile/g" \
-e "s/results.title/$title/g" $plt | gnuplot
mv $pngfile $HTDOC/
mv $tsvfile $HTDOC/$tsvfile.txt
echo "httpbench done." 
exit 0

&lt;/pre&gt;

	&lt;ol&gt;
	&lt;li&gt;/usr/local/httpmark/httpmark.sh&lt;/li&gt;
		&lt;li&gt;dir2mo httpmark httpmark-0.1.mo&lt;/li&gt;
		&lt;li&gt;reboot&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;final run&lt;/h3&gt;


	&lt;ol&gt;
	&lt;li&gt;uselivemod gnuplot.mo&lt;/li&gt;
		&lt;li&gt;uselivemod httpmark-0.1.mo&lt;/li&gt;
		&lt;li&gt;/usr/local/lighttpd/my.lighttpd start&lt;/li&gt;
		&lt;li&gt;/usr/local/httpmark/httpmark.sh 1 50 150 1 600 10&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;&lt;a href="/files/hmark_1.png"&gt;
&lt;img src="/files/hmark_1.png" width="320" height="240"&gt;
&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;跑完可以到  http://127.0.0.1 去看結果，測試需要不斷調整觀察，這個部份是最難的，一直到找出轉折點，換成 httpmark.sh 2 xx xx xx xx xx  繼續跑，可以放 4 個結果。&lt;/p&gt;


	&lt;h3&gt;download&lt;/h3&gt;


	&lt;p&gt;&lt;img src="/files/archive.png" alt="" /&gt; &lt;a href="/files/httpmark-0.1.mo"&gt;httpmark-0.1.mo&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 17 Sep 2006 21:11:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:9b7b0422-b2e7-4a7b-bb88-a13bc453bfc9</guid>
      <author>LIN</author>
      <link>http://blog.extremepattern.com/articles/2006/09/17/httpmark-mo</link>
      <category>linux</category>
    </item>
  </channel>
</rss>

