【问题标题】:What is the limit on scripts running at the same time on a nginx/php-fpm config?在 nginx/php-fpm 配置上同时运行的脚本有什么限制?
【发布时间】:2015-11-14 13:22:45
【问题描述】:

问题是我必须使用 curl,有时由于超时,curl 请求需要很长时间。我已将超时设置为 1 秒,因此任何请求都不会超过 1 秒,但服务器仍然无法处理其他 php 请求。

我的问题是 nginx/php-fpm 可以处理多少个并发脚本(同时运行)。我看到的是一些持续 1 秒的请求使整个服务器无响应。我可以更改哪些设置以便同时处理更多请求?

【问题讨论】:

  • 不需要多卷曲,每个php脚本只发出一个卷曲请求。但是如果 3-4 个用户在他们的浏览器中调用脚本并且所有请求都需要 1 秒才能达到超时,那么服务器就会对其他人无响应。
  • 我刚刚看到一些请求需要 14 秒,尽管超时时间仅为 1 秒。现在我将 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 都设置为 1 秒。我想知道这怎么可能需要 14 秒。

标签: php curl nginx


【解决方案1】:

Multicurl 确实不能解决您的问题,但异步可能是。我不确定解决方案是否正在调整 Nginx。如果您考虑以下选项之一,它会更好地扩展:

  • 您可以使用 Guzzle http://docs.guzzlephp.org/en/latest/ 抽象 Curl,并使用他们的方法进行异步调用和承诺。

  • 您可以使用 Gearmand http://gearman.org/getting-started/,这将使您能够将异步消息发送到远程服务器,该服务器将根据您在消息中注册的脚本处理指令。 (我使用这种机制进行非阻塞日志记录)

无论哪种方式,您的调用都将在几毫秒内完成,不会阻塞您的 nginx,但您的代码必须稍作更改。

【讨论】:

    【解决方案2】:

    因为 DNS 原因,php-curl 没有及时响应。

    问题是我必须从 CDN 访问文件,但域后面的 IP 经常更改,不幸的是 curl 保留了 DNS 缓存。

    所以它有时会尝试从不再有效的 IP 访问文件,但它们仍在 php-curl 的 DNS 缓存中。

    我不得不完全放弃 php-curl 并使用普通的 file_get_contents(...) 请求。这样就彻底解决了问题。

    【讨论】:

      猜你喜欢
      • 2017-05-25
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      相关资源
      最近更新 更多