EC2の第1世代インスタンスでnode.jsのコンパイル時間を計測する
調べたインスタンス
まず解凍・・・
tar | m1.xlarge | m1.large | m1.small | t1.micro |
---|---|---|---|---|
real | 0m0.851s | 0m1.034s | 0m3.999s | 0m1.286s |
user | 0m0.680s | 0m0.736s | 0m1.712s | 0m0.560s |
sys | 0m0.496s | 0m0.504s | 0m1.660s | 0m0.420s |
コンパイル時間
make | m1.xlarge | m1.large | m1.small | t1.micro |
---|---|---|---|---|
real | 6m16.558s | 6m14.260s | 13m45.992s | 39m51.288s |
user | 4m54.962s | 4m52.074s | 10m48.917s | 29m23.018s |
sys | 0m46.923s | 0m46.819s | 2m15.564s | 6m20.580s |
t1.microはキツイですね。
せっかくなので、node.jsを動かしてみましょう。
stackoverflowでみつけたnode.jsのコードで試してみます。 http://stackoverflow.com/questions/10457497/node-js-apache-bench-test
var sys = require('sys'), http = require('http'), fs = require('fs'), index; http.createServer(function(request, response) { fs.readFile('./loadtestfile.txt', function (err, data) { response.writeHeader(200, {"Content-Type": "text/plain"}); response.write(data); response.end(); }); }).listen(80);
1kのファイル作成
dd if=/dev/zero of=loadtestfile.txt bs=1k count=1
起動
sudo /usr/local/bin/node test.js
aws内からabベンチ。
ab -c100 -n10000 をテスト Requests per second [#/sec] (mean)
- | m1.xlarge | m1.large | m1.small | t1.micro |
---|---|---|---|---|
1k | 2949.32 | 1948.28 | 962.10 | 2521.37 |
10k | 1642.44 | 1652.94 | 119.313 | 1736.27 |
っとこのへんで、t1.microのスポットインスタンスが脱落・・・
t1.microのnode.jsのコストパフォーマンスはピカ1でした。 コンパイルは最悪ですが・・・
ab -c1000 -n10000 をテスト Requests per second [#/sec] (mean)
- | m1.xlarge | m1.large | m1.small |
---|---|---|---|
10k | 2271.20 | 2277.20 | 825.06 |
100k | 426.94 | 192.95 | 349.05 |
1m | 落ちます | 落ちます | 落ちます |
abコマンドで1000クライアントだと、たまにこんなふうに落ちます。
100kだとよく落ちます。
events.js:71 throw arguments[1]; // Unhandled 'error' event ^ Error: accept EMFILE at errnoException (net.js:770:11) at TCP.onconnection (net.js:1030:24)
あと、こんな風に
http.js:743 throw new TypeError('first argument must be a string or Buffer'); ^ TypeError: first argument must be a string or Buffer at ServerResponse.OutgoingMessage.write (http.js:743:11) at /home/ec2-user/test.js:11:14 at fs.js:117:20 at Object.oncomplete (fs.js:297:15)
ちなみに、httpdの場合の結果。
ab -c1000 -n10000 をテスト Requests per second [#/sec] (mean)
- | m1.xlarge | m1.large | m1.small |
---|---|---|---|
10k | 1884.99 | 1302.37 | Total of 9820 requests completed |
100k | Total of 7339 requests completed | Total of 4406 requests completed | Total of 4719 requests completed |
1m | Total of 580 requests completed | Total of 1225 requests completed | Total of 344 requests completed |
そしてnginxの場合
- | m1.xlarge | m1.large | m1.small |
---|---|---|---|
100k | 417.52 | 390.99 | 245.36 |
1m | Total of 1319 requests completed | Total of 3106 requests completed | Total of 519 requests completed |
nginx優秀ですね。100kでも Total of 9785 requests completed とかなりますが。一番安定してます。