kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

siegeを使って複数のURLを対象にベンチマークをする

ずっとabを使ってベンチマークをとってましたが、マルチURLに対して実行したいことがあったので使ってみました。

インストール

http://download.joedog.org/siege/ で過去のバージョンも見れます。

cd /usr/local/src
wget http://download.joedog.org/siege/siege-latest.tar.gz
tar zxf siege-latest.tar.gz 
cd siege-3.0.9/
./configure
make
make install

/usr/local/binsiegeがインストールされます。
/usr/local/etcsiegercurls.txtが配置されています。
siegercは、siege実行時の設定ファイルのひな形でホーム配下にコピーして使います。
urls.txtは、列挙するURLのサンプルが書いてあります。
コピーしなくてもよいですが、サンプル見ながら記述したいので、実行する場所にコピーします。

cp /usr/local/etc/siegerc ~/.siegerc
cp /usr/local/etc/urls.txt ~/

~/urls.txtにリクエストを送りたいURLを記述します。

-t と -r は一緒には使えない

-t と -r を一緒に指定すると下記のようなエラーがでました。
-t は実行時間ベースのテストで、-r は繰り返し回数ベースのテストになるためのようです。
-t は指定した時間だけテストを行い、-rは指定した回数だけリクエストを送るもののようです。

[error] CONFIG conflict: selected time and repetition based testing
defaulting to time-based testing: 5 seconds
** SIEGE 3.0.9
** Preparing 3 concurrent users for battle.
The server is now under siege...

ヘルプを抜粋すると下記のような感じです。

-r NUM, --reps=NUM,  --reps=once
      REPS,  allows  you  to  run the siege for NUM repetitions. If --reps=once, then siege will run through the urls.txt file and hit each URL in the file exactly once. The list will be divided among each
      simulated user. So if you run --reps=once -c10 on a file which contains 30 URLs, then each user will run three times. NOTE: -t/--time takes precedent over -r/--reps. If you want to use  this  option,
      make sure time = x is commented out in your $HOME/.siegerc file.                                                                                                                                                               
                                                                                                                                                                                                                                     
-t NUMm, --time=NUMm                                                                                                                                                                                                                  
      TIME, allows you to run the test for a selected period of time.  The format is "NUMm", where NUM is a time unit and the "m" modifier is either S, M, or H for seconds, minutes and hours.  To run siege                        
      for an hour, you could select any one of the following combinations: -t3600S, -t60M, -t1H.  The modifier is not case sensitive, but it does require no space between the number and itself. 

urls.txtでは変数が使える

1行目で変数の設定をし、2,3行目で使用しています。 変数は複数定義できますが、1行に1つの変数しか定義できないようです。

HOST = homer.whoohoo.com
http://${HOST}/index.html
http://${HOST}/howto.jsp

参考

http://www.joedog.org/siege-home/ http://nori3tsu.hatenablog.com/entry/2013/11/02/125000 http://blog.cloudpack.jp/2014/08/25/easy-web-load-test-with-using-siege/ http://wp.heptagon.co.jp/blog/archives/234