我正在一个高流量站点上运行 nginx 和 php-fpm。我让 nginx 通过 tcp/ip 与 php-fpm 进行通信,nginx 和 php-fpm 池都运行在同一服务器上。
当我使用 tcp/ip 让 nginx 和 php-fpm 池相互通信时,页面加载需要几秒(5-10)秒才能执行任何操作,当它最终开始运行时,不需要任何时间一切都是为了加载完成。由于 php-fpm 的状态页面显示监听积压已满,我假设处理请求需要一些时间。Netstat 显示大量(20k+)连接处于 TIME_WAIT 状态,不知道这是否相关,但似乎相关。
当我尝试让 nginx 和 php-fpm 通过 UNIX 套接字进行通信时,页面实际加载之前的时间几乎减少到零,并且完成的页面出现在我的浏览器中之前的时间减少了 1000 倍。UNIX 套接字的唯一问题是它在日志中给出了很多错误:
*3377 connect() to unix:/dev/shm/.php-fpm1.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 122.173.178.150, server: nottherealserver.fake, request: "GET somerandomphpfile HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/.php-fpm1.sock:", host: "nottherealserver.fake", referrer: "nottherealserver.fake"
Run Code Online (Sandbox Code Playgroud)
我的两个问题是:
有谁知道为什么 tcp/ip 方法在真正连接到 php-fpm 后端之前需要等待这么长时间?
为什么 UNIX 套接字在使用它而不是 tcp/ip 时会导致问题?
我尝试过的:
当尝试减少 TIME_WAIT 连接数(从 30k+ 下降到 20k+)时,将 …