この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
nodeで負荷テストを実行する
Apacheは標準で「ab」(Apache Bench) というツールが付属しており、 同時接続数/リクエスト数/URLを指定することで簡単にWEBの性能を測定することができます。
今回紹介するloadtestは、abと同じように指定したURLへの負荷テストを実行します。 また、このloadtestはabと互換性があるよう設計されたオプションも持っています。 コマンドラインから実行することで負荷テストを実行できますし、nodeモジュールとしてAPIを使用して テストをカスタマイズすることもできます。
ではloadtestモジュールをインストールして負荷テストを行ってみましょう。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Node.js : v0.10.8
- npm : 1.2.23
npmを使用してモジュールをグローバルインストールします。
% npm install -g loadtest
負荷テストを実行してみる
loadtestコマンドを実行すれば、負荷テストを実行できます。
% loadtest [-n requests] [-c concurrency] [URL]
URLはhttp/httpsからはじまるURLを指定することができます。 -nオプションはリクエスト数、-cオプションは並行処理数を設定します。
loadtestにはテストサーバが付属しているので、それで負荷テストをローカルで行ってみましょう。 下記のように8000番ポートを指定してテストサーバを起動します。
% testserver 8000
loadtestを実行してみます。リクエスト数は10でやってみましょう。
% loadtest -n 10 http://localhost:8000 [Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO Requests: 0 (0%), requests per second: 0, mean latency: 0 ms
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO Completed requests: 10
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO Total time: 0.035559 s
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO Requests per second: 281
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO Mean latency: 3.23 ms
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO Percentage of the requests served within a certain time
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO 50% 1 ms
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO 90% 18 ms
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO 95% 18 ms
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO 99% 18 ms
[Fri Aug 30 2013 09:29:54 GMT+0900 (JST)] INFO 100% 18 ms (longest request)
リクエストした結果情報がコンソールに表示されます。
また、loadtestをモジュールとしてnodeプログラムから使用することも可能です。 テストサーバが起動した状態で下記プログラムを実行すると、loadtestコマンドを実行した時と同じように負荷テストが実行されます。
//app.js
var loadtest = require('loadtest');
var options = {
url: 'http://localhost:8000',
maxRequests: 10,
};
loadtest.loadTest(options, function(error, result)
{
if (error)
{
return console.error('Got an error: %s', error);
}
console.log('Tests run successfully:',result);
});
% node app.js
Tests run successfully: { totalRequests: 10,
totalErrors: ・・・,
totalTimeSeconds: ・・・,
rps: ・・・,
meanLatencyMs: ・・・,
percentiles: ・・・,
errorCodes: {}
}
まとめ
今回はloadtestモジュールの簡単な使用方法について紹介しました。 これ以外にもテスト時にクッキー情報を使用したり、秒ごとに送信するクライアントの数を制御したりできます。 Githubには実行オプション等の詳細情報もありますので、確認してみてください。