We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。
允许在本地运行的进程之间进行通信。
从上面的图片可以看,unix socket减少了不必要的tcp开销,而tcp需要经过loopback,还要申请临时端口和tcp相关资源。但是,unix socket高并发时候不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。tcp这样的面向连接的协议,多少可以保证通信的正确性和完整性。
如果是在同一台服务器上运行的nginx和php-fpm,并发量不超过1000,选择unix socket,因为是本地,可以避免一些检查操作(路由等),因此更快,更轻。 如果我面临高并发业务,我会选择使用更可靠的tcp socket,以负载均衡、内核优化等运维手段维持效率。
将sock文件放在/dev/shm目录下,使用的内存读写更快。
# cd /dev/shm touch php7.0-fpm.sock chown www-data:www-data php7.0-fpm.sock chmod 777 php7.0-fpm.sock
php-fpm 配置
# vi /etc/php/7.0/fpm/pool.d/www.conf listen= /dev/shm/php7.0-fpm.sock listen.owner = www-data listen.group = www-data
nginx server块配置
location ~* \.php$ { fastcgi_pass unix:/dev/shm/php7.0-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; }
1.修改内核参数
net.unix.max_dgram_qlen = 4096 net.core.netdev_max_backlog = 4096 net.core.somaxconn = 4096
2.提高backlog backlog默认位128,1024这个值最好换算成自己正常的QPS。
nginx.conf server{ listen 80 default backlog=1024; } php-fpm.conf listen.backlog = 1024
3.增加sock文件和php-fpm实例 在/dev/shm新建一个sock文件,在nginx中通过upstream魔抗将请求负载均衡到两个sock文件, 并且将两个sock文件分别对应到两套php-fpm实例上。
nginx通过TCP以及unix-domain-socket连接fastcgi方式对比 nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket
The text was updated successfully, but these errors were encountered:
感谢分享~
Sorry, something went wrong.
No branches or pull requests
tcp socket
允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。
unix socket
允许在本地运行的进程之间进行通信。
分析
从上面的图片可以看,unix socket减少了不必要的tcp开销,而tcp需要经过loopback,还要申请临时端口和tcp相关资源。但是,unix socket高并发时候不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。tcp这样的面向连接的协议,多少可以保证通信的正确性和完整性。
我的选择
如果是在同一台服务器上运行的nginx和php-fpm,并发量不超过1000,选择unix socket,因为是本地,可以避免一些检查操作(路由等),因此更快,更轻。
如果我面临高并发业务,我会选择使用更可靠的tcp socket,以负载均衡、内核优化等运维手段维持效率。
nginx和php-fpm 使用unix socket
将sock文件放在/dev/shm目录下,使用的内存读写更快。
php-fpm 配置
nginx server块配置
提高nginx和php-fpm使用的 unix socket稳定性(单机能力有限)
1.修改内核参数
2.提高backlog
backlog默认位128,1024这个值最好换算成自己正常的QPS。
3.增加sock文件和php-fpm实例
在/dev/shm新建一个sock文件,在nginx中通过upstream魔抗将请求负载均衡到两个sock文件,
并且将两个sock文件分别对应到两套php-fpm实例上。
参考
nginx通过TCP以及unix-domain-socket连接fastcgi方式对比
nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket
The text was updated successfully, but these errors were encountered: