![Unix套接字连接限制](https://linux22.com/image/614411/Unix%E5%A5%97%E6%8E%A5%E5%AD%97%E8%BF%9E%E6%8E%A5%E9%99%90%E5%88%B6.png)
这个问题可能看起来已经讨论过/回答过了。但我正在寻找一些信息,但我在任何地方都找不到明确的答案。
我有一个 Nginx + php-fpm 设置,它使用 unix 套接字将 Nginx 与后端 php-fpm fastcgi 进程通信。最近我听说基于 unix 套接字的连接不像基于 tcp 的连接那样可扩展。不确定这里的限制因素是什么,尤其是当我从同一主机运行所有内容时。
我可以增加每个系统或每个用户(nginx)的最大文件描述符。我还可以增加每个 nginx 工作进程的此限制。最大文件描述符是限制因素吗?
我在此设置中配置的网站很少,最大套接字数(每个网站一个)。我使用的套接字数不到 50 个。当多个 nginx 线程在高负载下与后端的多个 php-fpm 实例通信时,每个套接字是否有最大并发连接数限制?或者,如果并发性非常高,什么可以真正限制套接字允许这些连接?
还有其他因素会影响性能吗?例如锁、磁盘 io 性能等?
答案1
我听说基于 unix 套接字的连接不如基于 tcp 的连接可扩展
恰恰相反。Unix 套接字比 TCP 连接更具可扩展性。因为使用 TCP 时,您必须使用整个网络堆栈。即使您在同一台机器上,每个数据包也必须封装和解封装。使用 Unix 套接字,您可以进行进程间通信。
然而,很多情况下不使用TCP数据包只是一种微优化,真正的瓶颈在别处。