2012-07-23 56 views
4

我在高流量网站上运行带有php-fpm的nginx。我让nginx通过tcp/ip与php-fpm进行通信,nginx和运行在同一台服务器上的php-fpm池。nginx <=> php-fpm:unix socket给出错误,tcp连接很慢

当我使用tcp/ip让nginx和php-fpm池与海誓山盟沟通时,页面的加载需要几个(5-10)秒才能完成任何事情,当它最终开始时,装载完成时完全没有时间。由于php-fpm的statuspage显示listen backlog已满,我认为处理请求需要一些时间。 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的连接数时设置net.ipv4.tcp_tw_recyclenet.ipv4.tcp_tw_reuse 1(从30K +至20K +下楼)

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

增加打开文件

最大数是什么恐怕还非常相关:尝试使用lighttpd + fastcgi,在连接最终得到处理之前的很长一段时间都有同样的问题。 MySQL不是太忙,不应该是等待时间长的原因。磁盘等待时间为0%(SSD磁盘),所以忙磁盘似乎也不是罪魁祸首。

希望有人发现了这个问题的修复,并愿意分享:)

+0

使用名称或IP?也许一个DNS解决问题? – 2012-07-23 19:55:46

+0

使用127.0.0.1 – Wouter 2012-07-23 20:04:43

+0

如果在shell提示符下执行telnet 127.0.0.1 9000'会怎么样?连接之前是否有相同的延迟? – 2012-07-23 20:42:43

回答

2

回答我的问题,因为这个问题就解决了(不知道这是做了正确的方式)。

我的问题是,APC缓存根本没有工作。它已安装,配置并启用,但未向其缓存添加任何内容。从APC切换到Xcache后,负载和加载时间大幅下降。仍然不知道为什么APC什么也没做,但现在我只是开心,这个问题解决了:)

感谢您的所有意见!