CrystalSnowman.com

あなたの時間節約につながる情報を提供します

nginxのworker_processes設定を見直してパフォーマンス改善する方法

WebPageTest

nginxworker_processes設定を見直してパフォーマンス改善を試みました。その結果をWebPagetestで測定しました。パフォーマンス改善してユーザとgoogleに評価されるサイトにしましょう。nginx.confの設定方法とパフォーマンス測定方法を紹介します。

nginxの設定

サイトの環境

このサイトはさくらVPSのメモリ1GB、CPU仮想2Coreで運営しています。OSがCentOS7で、Webサーバにnginxを使用しています。

worker_processesとは

worker_processesはハートビーツのサイトでは次のように解説されています。

worker_processesディレクティブは動作させるnginxのworkerプロセスの数を設定します。通常はCPUのコア数以下に設定します。イベント駆動のアーキテクチャであるため、CPUのコア数より多い数のプロセスを動作させても意味がありません。なお、デフォルトの設定値は1です。

http://heartbeats.jp/hbblog/2012/02/nginx03.html

今回はworker_processesをサーバのコア数と合わせる設定をします。

nginx.confの設定

nginxの基本的な設定は/etc/nginx/にあるnginx.confにあります。
nginxインストール直後のnginx.confの設定は以下になっていると思います。

2行目のworker_processesの値を変更します。
設定を1からCPUコア数の2に合わせます。

ちなみにサーバのCPUコア数は以下のコマンドで確認できます。

「worker_processes」関連設定

worker_processesを変更したので関連する項目も設定します。
worker_rlimit_nofile」はワーカプロセスが同時に使えるファイル数です。サーバの最大プロセス数を設定します。
最大プロセス数は以下で確認できます。

worker_cpu_affinity」はワーカプロセスが使用する CPU コアを定義します。たとえば二つのコアにプロセスを均等に割り当てるとします。コアをそれぞれ1と2とします。この1と2を二進数で表すと01と10となります。コアが3つの場合は01 10 11となります。これらの値を設定します。

worker_connections」は1ワーカプロセスあたりの最大接続数です。ここでは根拠ないですがデフォルトの1024のままにしておきます。

以上を踏まえてnginx.confを設定します。

nginx.confを保存してnginx -s reloadで設定変更を反映させます。
設定反映は「ps aux | grep ‘nginx: worker’」で確認します。

「nginx: worker process」が2つ動作していることが確認できます。

パフォーマンス測定

2CPUを使用する設定によってパフォーマンスが改善されたか確認します。ブラウザの開発ツールのNetworkでwebページ表示時間を取得してもよかったのですが、今回はWebPageTestというパフォーマンス測定サイトを使ってみました。
http://www.webpagetest.org/

測定対象はこのcrystalsnowmanのホームです。

1CPU時のパフォーマンス

WebPageTest1

初回アクセスのFirst Viewが2.539秒で2回目以降のRepeat Viewが1.628秒となっています。2回目以降のパフォーマンスがよいのはキャッシュが使われているためだと思います。

2CPU時のパフォーマンス

WebPageTest2

初回アクセスのFirst Viewが1.926秒で2回目以降のRepeat Viewが1.567秒となっています。1CPUよりは若干良くなっている程度でしょうか。
このサイトは記事数がまだ少なく、CPUに負荷をかける処理が少ないと思います。そのため1CPUと2CPUで大きな差が見られなかったのかもしれません。
一般的には大量の画像や3Dアニメーションなど負荷をかける処理などでマルチコアの恩恵が受けられるようです。

参考にしたサイト

今回の設定変更とパフォーマンス測定のため参考にさせていただきました。

お名前.com VPS にNginxでWordPressを構築。設定の意味もまとめた

nginx連載3回目: nginxの設定、その1

Webページのパフォーマンス測定サイト「WebPagetest」で計測してみた

まとめ

worker_processesをサーバのCPUコア数と合わせることで若干のパフォーマンス向上が見られました。ただ大きな向上とならなかったのは、サイト自体まだ小さく、プラグインも少な目にしているので大きな差が生まれなかったのかと思います。記事数が増えてからもう一度測定したいと思います。


Top