developer's diary

最近はc#のエントリが多いです

EC2の第1世代インスタンスでnode.jsのコンパイル時間を計測する

調べたインスタンス

f:id:mitsugi-bb:20130309205738p:plain

まず解凍・・・

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 とかなりますが。一番安定してます。