TCP/IPとUNIX Socketの接続でどれくらい違うか

tcp-ip_unix-socket_connectionNginxから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 >