TECH
[CloudGarage]

PHP-FPMの設定はUNIX socketとポート番号、どちらが良いのか

TECH
中津川 篤司

nginxでPHPを使えるように設定する場合、PHP-FPMを使います。そして連携させる際の設定として、UNIX socketとポート番号設定のどちらかが指定できます。今回はそのどちらがベストなのか検証してみました。

実行結果

まずは実行結果です。以下はポート番号での設定です。

Concurrency Level:      5
Time taken for tests:   3.905 seconds
Complete requests:      50
Failed requests:        40
   (Connect: 0, Receive: 0, Length: 40, Exceptions: 0)
Total transferred:      3988340 bytes
HTML transferred:       3981490 bytes
Requests per second:    12.81 [#/sec] (mean)
Time per request:       390.455 [ms] (mean)
Time per request:       78.091 [ms] (mean, across all concurrent requests)
Transfer rate:          997.52 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       91  214 226.8    146     984
Processing:    66  140 125.0    122     973
Waiting:       31   81 121.6     62     895
Total:        208  354 249.9    268    1087

以下はUNIX socketの場合です。

Concurrency Level:      5
Time taken for tests:   3.802 seconds
Complete requests:      50
Failed requests:        37
   (Connect: 0, Receive: 0, Length: 37, Exceptions: 0)
Total transferred:      3988335 bytes
HTML transferred:       3981485 bytes
Requests per second:    13.15 [#/sec] (mean)
Time per request:       380.218 [ms] (mean)
Time per request:       76.044 [ms] (mean, across all concurrent requests)
Transfer rate:          1024.37 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      107  204  38.2    208     286
Processing:    70  147  40.0    140     241
Waiting:       49   85  21.8     86     127
Total:        269  351  47.5    340     525

実行したのが簡単なスクリプトなのでほとんど違いは出ていませんが、それでもUNIX socketの方が高速に処理されています。

向き不向き

UNIX socketの方が処理速度は高速ですが、同じサーバ上で処理されている場合に限ります。リモートの場合はポート番号での接続になります。つまりHTTPサーバとアプリケーションサーバを分離し、スケーリングさせる際にはポート番号での利用になるでしょう。

設定の違い

UNIX socketかポート番号かは設定に違いがあります。具体的にはnginxの /etc/nginx/conf.d/default.conf と PHP-FPMの /etc/php/7.0/fpm/pool.d/www.conf です。

/etc/nginx/conf.d/default.conf の違いです。

# UNIX socketの場合
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
# ポート番号の場合
fastcgi_pass 127.0.0.1:9000;

/etc/php/7.0/fpm/pool.d/www.conf の違いは以下です。

# UNIX socketの場合
listen = /run/php/php7.0-fpm.sock
# ポート番号の場合
listen = 127.0.0.1:9000

この設定によって、動作を変えられます。

まとめ

一台のサーバでnginxとPHP-FPMを運用する際にはUNIX socketを使いましょう。複数台構成になったらポート番号を使いましょう。実行速度に大きな差がある訳ではありませんが、パフォーマンスはUNIX socketの方が良いようです。

この記事を書いた人

中津川 篤司

株式会社MOONGIFT 代表取締役。CloudGarage、ニフクラ mobile backend、hifive エバンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。2004年、まだ情報が少なかったオープンソースソフトの技術ブログ『MOONGIFT』を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶエバンジェリスト業「DevRel」活動をスタートした。 Twitter:@goofmint | GitHub:@goofmint | Facebook: goofmint

この記事のタグ

オススメの記事

ページトップへ