TCP/IPとUNIX Socketの接続でどれくらい違うか
NginxからPHP-FPMの接続とPHP-FPMからMariaDBの接続をTCP/IPとSocketで比較してみた。
環境: CentOS 6.7, nginx 1.8.0, PHP 5.6.15, MariaDB 10.0.22
基本的な概念は下記記事が分かりやすい。
リクエストはWindows上のab.exe(Apache Bench)からMac上のVMware Fusionの仮想マシン(CentOS)にあるWordPressに対して行う。
まずはPHP-FPMもMariaDBもTCP/IP接続で計測
C:> .\ab.exe -n 50 -c 5 http://dev.hoge.or.jp/
1回目:14.03 [#/sec]
2回目:14.00 [#/sec]
3回目:19.92 [#/sec]
平均: 15.98 [#/sec]
PHP-FPMへの接続をUNIX Socketに変えてみる。
PHP-FPMの設定
# less /etc/php-fpm.d/www.conf
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/www.sock
Nginxの設定
# less /etc/nginx/conf.d/hoge.conf
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
サービス再起動
# /etc/rc.d/init.d/php-fpm restart
# /etc/rc.d/init.d/nginx restart
sockファイルをnginxから読み取れるように権限を変更しないと「502 Bad Gateway」になる
# chown nginx.www /var/run/php-fpm/www.sock
計測実行
1回目:18.35 [#/sec]2回目:17.64 [#/sec]
3回目:14.01 [#/sec]
平均: 16.66 [#/sec]
ちょっとだけ速くなった。
次はMariaDBへの接続をUNIX Socketに変えてみる。
YUM経由でインストールした場合は/var/lib/mysql/mysql.sockがデフォルトらしい。
wp-config.phpを変更
//define('DB_HOST', 'localhost');
define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');
計測実行
1回目:18.23 [#/sec]2回目:14.70 [#/sec]
3回目:18.44 [#/sec]
平均: 17.12 [#/sec]
もっと大量のデータを取れば違いが出るかもしれないが、体感速度は何も変わらない。
Web案件ではTCP/IPで統一することにした。proxy_cacheやfastcgi_cacheで体感速度を上げる。
アプリ案件の場合は、Node.jsからDBに接続するときにUNIX Socketを使った方がよさそう。
< Related Posts >