UNIX套接字是一种进程间通讯机制(IPC),它可以让运行于同一台机器上的进程间进行双向的数据交换.
TCP/IP套接字可以让运行于不同机器上的进程进行通讯,不过你也可以使用回路网络接口(localhost, 127.0.0.1)让运行同一台机器上的两个进程进行通讯.

所以当两个进程运行于同一台机器上时,UNIX套接字TCP/IP套接字相比开销更小,因为它不使用网络底层协议,降低了很大的开销.

nginx和php-fpm之间默认使用的是TCP/IP套接字,然后使用回路网络接口进行通讯.我们可以切换到UNIX套接字来提供性能.

步骤

1.修改php-fpm.conf


1
listen = 127.0.0.1:9000

注释掉,在下面增加一行

1
listen = /tmp/php-fpm.sock


1
2
3
;listen.owner = www
;listen.group = www
;listen.mode = 0660

取消注释.
注: www是我的nginx服务所属的用户和组,你那可能不一样

2.修改nginx.conf


1
fastcgi_pass 127.0.0.1:9000

改为

1
fastcgi_pass unix:/tmp/php-fpm.sock

3.重启nginx和php-fpm

测试

我使用的测试工具是wrk, 下载地址.

测试机参数: i3双核四线程,4G内存, ubuntu12.04(64位)

使用TCP/IP套接字

使用UNIX套接字

结论

使用TCP/IP套接字每秒可处理230.46个请求,使用UNIX套接字每秒可处理8352.26个请求.
可见:
当nginx和php-fpm运行于同一台机器上时,使用UNIX套接字可显著提高性能