![NGINX / PHP-FPM:Ajax 第一个请求很慢,接下来的请求很好](https://linux22.com/image/655895/NGINX%20%2F%20PHP-FPM%EF%BC%9AAjax%20%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%AF%B7%E6%B1%82%E5%BE%88%E6%85%A2%EF%BC%8C%E6%8E%A5%E4%B8%8B%E6%9D%A5%E7%9A%84%E8%AF%B7%E6%B1%82%E5%BE%88%E5%A5%BD.png)
- 该 CMS 是
Elxis
,源自 Joomla(PHP)的一个变体。 - 服务器正在
nGinx
运行PHP-FPM
- 所有请求最终都会被记录并执行,但是!!!
通过 URL 栏触发特定请求时,请求会立即执行。但是,通过 ajax(通过 jQuery)触发时,同一请求的行为非常奇怪。
即:第一个请求(在媒体管理器上)要查看图片详细信息,将使用 Ajax 触发。它记录在浏览器上,但未记录在服务器上... 暂时还不行... 经过 40-50 秒后,请求出现在服务器上,然后立即得到响应。
后面的所有请求都会立即执行,没有问题。只有第一个请求比较粗糙。
我遇到麻烦了,因为没有任何地方记录任何错误:除了第一个请求到达服务器的滞后之外,一切看起来都很正常......
它不是路由(站点已经启动并且请求已被处理),它不是解析(IP 在我的 /etc/hosts 文件中)。
更糟糕的是,尝试在服务器上捕获数据包(tcpdump)没有任何输出:请求尚未到达...在客户端也尝试过:没有输出 - 至少 40 秒...
一切都在浏览器上,开发人员控制台没有显示任何错误,只是一个待处理的请求。
这些能给任何人带来一些印象吗?
The server:
nginx version: nginx/1.6.2
PHP 5.6.7-1 (cli)
PHP 5.6.7-1 (fpm-fcgi)
jQuery 版本 1.11
客户端:在 Firefox 39 (ubuntu) 和 Chromium 41 上进行了尝试
注意:我在 stackoverflow 上问过同样的问题,因为我无法清楚地确定这是否是代码或架构的问题……
答案1
我遇到了类似的问题,最终增加了 php-fpm 工作线程的数量。我在 www.conf (pool.d) 中使用了以下设置来解决我遇到的问题。我有一个分析服务器设置,用于跟踪页面浏览量,记录页面浏览量的 API 延迟了 15-20 秒。调整以下设置解决了我的问题,也许对您有帮助。
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3