我在高流量网站上运行带有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_recycle
和net.ipv4.tcp_tw_reuse
1(从30K +至20K +下楼)
从默认的128增加了net.core.somaxconn
值1024(尝试也更高,但仍然使用Unix套接字时相同的错误)
增加打开文件
最大数是什么恐怕还非常相关:尝试使用lighttpd + fastcgi,在连接最终得到处理之前的很长一段时间都有同样的问题。 MySQL不是太忙,不应该是等待时间长的原因。磁盘等待时间为0%(SSD磁盘),所以忙磁盘似乎也不是罪魁祸首。
希望有人发现了这个问题的修复,并愿意分享:)
使用名称或IP?也许一个DNS解决问题? – 2012-07-23 19:55:46
使用127.0.0.1 – Wouter 2012-07-23 20:04:43
如果在shell提示符下执行telnet 127.0.0.1 9000'会怎么样?连接之前是否有相同的延迟? – 2012-07-23 20:42:43