前々からどんな感じだろうかと思っていた Flood を軽く使ってみたので、
その時のメモです。
Floodって?
簡易なHTTPリクエストの負荷生成ツールとでも言えばいいでしょうか。
Floodのトップページはこちら。→Flood
Apache ProjectのツールだとabとかJMeterが有名なんではないかと思います。
が、しかし
- abは楽だが単一URLのリクエストのみ可能
- JMeterはちゃんと使おうとすると設定が結構大変
そんなこともあり、試しに使ってみることにしました。
インストールする
インストールはソースファイルをコンパイルします。
マニュアルがあるので、こちらを参考にやっていきます。
ちなみにCentOS4.8にインストールしました。
ここにソースファイルはあったのですが、
こっちをコンパイルしようとしたところ、以下のようなメッセージが出て、どうもうまくいきませんでした。
# make build/rules.mk:57: /build/config_vars.mk: No such file or directory make: *** No rule to make target `/build/config_vars.mk'. Stop.
ということもあり、リポジトリからソースファイルをダウンロード。
aprとapr-utilはマニュアル上はソースコード配下に置きましょうということでしたが、
こっちも今一つうまくいかなかったので、公式サイトから最新のtar.gzファイルをダウンロードしました。
以下、手順。
/usr/local/src 以下にソースファイルをダウンロードしておきます。
インストールするソフトは /usr/local/flood 以下にディレクトリを個別に切っていく形にします。
ソースファイルのダウンロード
# svn co http://svn.apache.org/repos/asf/httpd/flood/trunk flood # wget http://www.apache.org/dist/apr/apr-1.4.2.tar.gz # wget http://www.apache.org/dist/apr/apr-util-1.3.9.tar.gz
flood本体はリポジトリから。
aprのインストール
# cd /usr/local/src # tar -xvzf apr-1.4.2.tar.gz # cd apr-1.4.2 # ./configure --prefix=/usr/local/flood/apr-1.4.2 # make # make install
apr-utilのインストール
# cd /usr/local/src # tar -xvzf apr-util-1.3.9.tar.gz # cd apr-util-1.3.9 # ./configure --prefix=/usr/local/flood/apr-util-1.3.9 --with-apr=/usr/local/flood/apr-1.4.2 # make # make install
Floodのインストール
一旦SSLを有効にしておきます。
# cd /usr/local/src/flood # ./buildconf # ./configure --prefix=/usr/local/flood/flood --with-apr=/usr/local/flood/apr-1.4.2 \ --with-apr-util=/usr/local/flood/apr-util-1.3.9 --enable-ssl --disable-shared # make all # make install
軽く使ってみる
Floodの設定ファイルはXML形式で書いていきます。
ソースファイルの中の「CONFIG」や「example」ディレクトリ以下の各種サンプルを参考にします。
ここの「Example profiles」にもほぼ同様の内容が出ています。
今回は「example」ディレクトリ以下の「round-robin-example.xml」をベースに編集しました。
作成した設定ファイルはこんな感じです。
<?xml version="1.0"?> <!DOCTYPE flood SYSTEM "flood.dtd"> <flood configversion="1"> <urllist> <name>Sample Url List</name> <description>Flood Sample</description> <url method="GET">http://xxx.xxx.xxx.xxx/index.html</url> <url method="GET">http://xxx.xxx.xxx.xxx/index2.html</url> <url method="GET">http://xxx.xxx.xxx.xxx/index3.html</url> </urllist> <profile> <name>Example Profile</name> <description>Flood Sample</description> <useurllist>Sample Url List</useurllist> <profiletype>round_robin</profiletype> <socket>generic</socket> <verify_resp>verify_200</verify_resp> <report>relative_times</report> </profile> <farmer> <name>Sample Farmer</name> <count>100</count> <useprofile>Example Profile</useprofile> </farmer> <farm> <name>Bingo</name> <usefarmer count="100" startcount="10" startdelay="1">Sample Farmer</usefarmer> </farm> <seed>1</seed> </flood>
要注意なのが、「farm」の「name」です。"Bingo"のままにしとかないとダメです。
で、実行。
# /usr/local/flood/flood/bin/flood round-robin.xml > sample.out
このようなログが出力されます。
1275980910827683 1275980910827761 1275980910828157 1275980910828183 1275980910828318 OK -1229743200 http://xxx.xxx.xxx.xxx/index.html 1275980910828356 1275980910828443 1275980910828834 1275980910828864 1275980910828977 OK -1229743200 http://xxx.xxx.xxx.xxx/index2.html 1275980910829019 1275980910829095 1275980910829546 1275980910829582 1275980910829678 OK -1229743200 http://xxx.xxx.xxx.xxx/index3.html
ソースファイルの「example」ディレクトリに簡易にログを解析できるスクリプトが入っています。
以下のようにすると簡易な解析結果が出力されます。
# /usr/local/src/flood/examples/analyze-relative test.out Slowest pages on average (worst 5): Average times (sec) connect write read close hits URL 0.0033 0.0049 0.0125 0.0152 10000 http://xxx.xxx.xxx.xxx/index.html 0.0034 0.0048 0.0112 0.0137 10000 http://xxx.xxx.xxx.xxx/index2.html 0.0018 0.0043 0.0100 0.0121 10000 http://xxx.xxx.xxx.xxx/index3.html Requests: 30000 Time: 4.10 Req/Sec: 10791.94
他にもいくつかサンプルがあるので、こいつらを参考に、今度はもう少し複雑な設定をしてみようかと。
リリース状況見る限り開発止まっている気がしないでもないのですが…。
今日はこんなところで。