Node.js 8.9.0 が LTS としてリリースされて数ヶ月がたち
そろそろ実戦投入していきたいのでパフォーマンスを計測/比較してみた.
実行環境
- AWS EC2 m3.medium インスタンス
- Ubuntu 16.04.3
Node.js
- 6系 - 6.12.3
- 8系 - 8.9.4
ベンチマークコード
シンプルに json を返すだけの処理で実施.
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'application/json'}); res.write(JSON.stringify({result: 'success'})); res.end(); }).listen(8080);
パフォーマンステストの方法
- Apache Bench を使用
- 10万リクエスト
- 並列数を変えながら(10 ~ 5000), かかった時間を計測
- 各並列数で3回実行した平均値を計測値とする
ab -n 100000 -c 5000 http://ec2-xxx/
途中で Too many open files
が出たので ulimit -n 10240
で上限値を増やした.
結果
まとめ
平均で 14%のパフォーマンス向上 が確認できた.
実戦投入に向けて
- Cluster を使用
- 重い処理
- DBアクセス
- シナリオテスト
あたりの検証もしていきたい.
おまけ
「なんで速くなってるの?」というところで
Node.js 本体とその実行環境である V8 JavaScript engine が改善されているからなのだけど
それらが具体的にどう改善されたかわかるまとめ.
(このあたりのコードを読んだ解説記事も書きたい)
stream: improve readable push performance by mscdex · Pull Request #13113 · nodejs/node · GitHub