カテゴリー
Development

Sailsで全てのCPUコアを使う

Node.jsのMVCフレームワークであるSailsはインストールも簡単で、気軽に試せます。しかし、Node.jsはシングルプロセス&スレッドで動作するので今時のマルチコアCPUではその性能はフルに発揮できません。以前はNginxなどで設定するなど、色々面倒でしたがPM2を利用すると簡単にプロセス管理が行えます。

(Last Updated On: 2018/08/13)

Node.jsのMVCフレームワークであるSailsはインストールも簡単で、気軽に試せます。しかし、Node.jsはシングルプロセス&スレッドで動作するので今時のマルチコアCPUではその性能はフルに発揮できません。以前はNginxなどで設定するなど、色々面倒でしたがPM2を利用すると簡単にプロセス管理が行えます。もちろんSails以外のNode.jsアプリケーションのプロセス管理にも利用できます。

Sailsのインストールと起動(通常の場合)

npmがインストールされていればSialsのインストールはコマンド一つで終わります。

$ sudo npm install -g sails

起動できるアプリを作るのもコマンド一つです。

$ sails new testApp

新しく作ったtestAppを起動するには次のようにします。

$ cd testApp
$ sails lift

デフォルトでは1337ポートで接続を待機します。ブラウザなどでhttp://localhost:1337:/にアクセスするとSailsの画面が確認できます。

スクリーンショット 2014-12-16 10.30.12

開発するにはこれで困りませんが、運用するには1つのCPUコアしか使わないのは困ります。

 

複数のCPUコアを使ってSailsを起動する

今はPM2でプロセス管理をするのが一般的だと思います。npmでインストールします。

$ sudo npm install pm2 -g

マルチコアを利用して起動するにはアプリケーションディレクトリからpm2コマンドでSailsを起動します。

$ pm2 start app.js
$ pm2 start app.js -i max  # Enable load-balancer and cluster features

スクリーンショット 2014-12-16 10.39.48

abコマンドでSailsアプリにアクセスすると複数コアを使っていることがわかります。

PM2のプロセス管理

全てのプロセスをリスト:

$ pm2 list

プロセスの開始、再起動、停止:

$ pm2 stop     < app_name | id | all >
$ pm2 restart  < app_name | id | all >
$ pm2 delete   < app_name | id | all >

特定プロセスの状態を取得:

$ pm2 describe 0

状態のモニタリング

$ pm2 monit

他にもログ管理などがあり、色々便利です。使い方はPM2リポジトリのページを見れば分かると思います。

 

ベンチマーク

abコマンドで簡単なベンチマークを取ってみました。

$ ab -c 10 -n 100000 http://localhost:1337/
  • PM2有り: Requests per second:    1774.98 [#/sec] (mean)

  • PM2無し: Requests per second:    485.02 [#/sec] (mean)

4コア、8スレッドのCore i7のPCですが、およそコア数と同じくらい4倍ほどになっています。スクリプト系言語のWebアプリプレームワークとしてはかなり高速な部類となる性能でした。