nginx< => php-fpm:unix socket给出错误,tcp连接很慢

时间:2012-07-23 19:39:02

标签: nginx php

我在高流量网站上使用php-fpm运行nginx。我让nginx通过tcp / ip与php-fpm进行通信,nginx和运行在同一服务器上的php-fpm池。

当我使用tcp / ip让nginx和php-fpm池相互通信时,页面加载需要花费几(5-10)秒才能完成任何操作,当它最终运行时,它需要没有时间完成装载。由于php-fpm的状态页显示监听积压已满,我认为在处理请求之前需要一些时间。 Netstat在TIME_WAIT状态下显示了很多(20k +)连接,不知道这是否相关但似乎相关。

当我尝试让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"

我的两个问题是:

有人知道为什么tcp / ip方法在它实际上似乎连接到php-fpm后端之前有这么大的等待吗?

为什么UNIX套接字在使用它时会导致问题而不是tcp / ip?

我尝试了什么:

尝试减少TIME_WAIT连接次数(从30k +降至20k +时)

net.ipv4.tcp_tw_recyclenet.ipv4.tcp_tw_reuse设置为1

net.core.somaxconn值从默认值128增加到1024(尝试更高但使用UNIX套接字时仍然是相同的错误)

增加了打开文件的最大数量

可能也非常相关:尝试使用lighttpd + fastcgi,在最终处理连接之前的很长一段时间内存在同样的问题。 MySQL不是太忙,不应该是等待时间长的原因。磁盘等待时间为0%(SSD磁盘),因此繁忙的磁盘似乎也不是罪魁祸首。

希望有人找到解决此问题的方法,并愿意分享:)

1 个答案:

答案 0 :(得分:2)

自问题解决后回答我自己的问题(不确定这是否是正确的方法)。

我的问题是APC缓存根本没用。它已安装,配置和启用,但未向其缓存添加任何内容。从APC切换到Xcache后,负载和加载时间大幅下降。仍然不知道为什么APC什么也没做,但此刻我很高兴问题得到解决:)

感谢你们的所有意见!