【发布时间】:2014-10-29 18:47:38
【问题描述】:
我有一个 PHP 站点,它可以进行大量的 ajax 调用。它们大约需要 8-10 秒,并通过 cURL 请求与许多第 3 方 API 进行通信。
当这些 ajax 调用正在进行时,站点的其余部分没有响应。不仅仅是这个页面,还有另一个页面上的另一个浏览器选项卡。
我应该检查什么以确保 PHP 能够分叉多个进程以使网站不会挂起?
PHP 作为 PHP-fpm 运行
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
fastcgi_buffers 256 64k;
fastcgi_buffer_size 2400k;
fastcgi_read_timeout 6000;
uwsgi_read_timeout 6000;
include fastcgi_params;
}
而且 nginx 有足够的工作进程
user www-data;
worker_processes 16;
pid /var/run/nginx.pid;
events {
worker_connections 8000;
multi_accept on;
}
另外,我已经使用 sleep() 和一个长 for 循环进行了测试。这两个都很好。似乎只是对外部站点的 cURL 调用导致了问题。
不确定缺少什么。
谢谢!
【问题讨论】:
-
听起来您正在运行您的 AJAX,并将异步功能设置为 false。你是如何设置你的 AJAX 的?
-
所有其他 ajax 都很好用。它只是在后端进行 cURL 调用的那些
-
显示你的javascript
-
$.post("mycall.php");如果 mycall.php 对 php sleep() 函数进行 cURL 调用,则站点在睡眠完成之前没有响应。