我有一些请求页面没有得到回应请求花费很长时间来处理的问题。
我有nginx设置使用php-fpm。 我有两个PHP-FPM设置池。 一个普通的网页请求池,一个池来提供图像和其他大型文件。
从我的php-fpmconfiguration文件:
[www] listen = var/run/php54/php-fpm-www.sock pm = dynamic pm.max_children = 20 pm.start_servers = 4 pm.min_spare_servers = 4 pm.max_spare_servers = 20 pm.max_requests = 200 [www-images] listen = var/run/php54/php-fpm-images.sock pm = dynamic pm.max_children = 5 pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_spare_servers = 2 pm.max_requests = 40
Nginxconfiguration为使用这两个独立的池,请求存储在Amazon S3中的图像通过“www-images”池重新调整为所需大小。 从我的nginxconfiguration文件:
location ~* ^/proxy { try_files $uri @404; fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-images.sock; include /opt/local/etc/nginx/fastcgi.conf; } location / { try_files $uri /routing.php?$args; fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock; include /opt/local/etc/nginx/fastcgi.conf; }
因为我正在testing一个可怕的互联网连接,这些请求将在PHP中超时,这是预期的。
当读取来自上游的响应头时,客户端:127.0.0.1,服务器:example.com,请求:上游超时(60:操作超时) “GET /proxy/hugeimage.png HTTP / 1.1”,上游:“fastcgi:// unix:/opt/local/var/run/php54/php-fpm-images.sock:”,主机:“example.com” ,推荐人:“ http://example.com/pictures ”
什么是不期望的,我想解决的是,任何应该到“www”池的请求都是由于nginx没有得到来自PHP-FPM的响应而超时。
2013/01/20 15:50:06 [error] 77#0:* 532上游超时(60:操作超时),从上游读取响应头时,client:127.0.0.1,server:example.com,request: “GET / pictures HTTP / 1.1”,上游:“fastcgi:// unix:/opt/local/var/run/php54/php-fpm-www.sock:”,主机:“example.com”
几分钟后,请求“www”池再次开始工作,而我没有采取任何行动。
我认为使用单独的池应该意味着,即使一个池有长时间请求的问题,另一个池应该保持不受影响。
所以我的问题是, 我如何隔离这两个池,以便一个池被超时请求所淹没,而不会影响另一个池。
为了澄清,我想通过devise来限制通过“www-images”池一次可以进行的请求的数量。 尽pipe在实践中这个限制几乎不可能达到(由于从S3下载到服务器的文件的caching),如果存在一个不寻常的情况,那个池到达极限,我希望www pool继续运行,因为这是网站function实际在哪里。
我发现了两件事情:
虽然这些是两个独立的东西,但是它们对向“www”池的请求阻塞的效果相同。