为什么缓慢的脚本会导致我的整个网站停止运行?

为什么缓慢的脚本会导致我的整个网站停止运行?

我有一个PHPcURL用于从另一台服务器加载文件的脚本。

该文件大约 24MB。我理解为什么脚本本身加载文件需要一点时间来执行,但是在脚本运行时对网站的任何请求都将暂停,直到脚本完成为止。

在我们旧的共享服务器上使用相同脚本时,这种情况没有发生。新服务器是云服务器。我将其扩展到 10 个节点(6Ghz 专用 CPU、3760MB RAM、2500GB 带宽),它对这个问题没有影响。

我不介意脚本本身需要很长时间才能执行,因为它将成为数据馈送的自动任务。但我不能让整个网站在它运行时锁定。

知道为什么会发生这种情况吗?


更新看起来这种情况只发生在本地。如果我在脚本运行时尝试在另一台计算机上加载网站,它会按预期工作。

答案1

您可能能够“ignore_user_abort(true)”,然后使用页面上的 HTTP 重定向到另一个页面。

PHP 5 也具有不错的线程功能,这也可能有帮助。

答案2

现在,关键问题是:除了获取该文件之外,您的脚本还做了什么?处理它并将数据插入数据库?也许在您的旧环境中,MySQL 使用 InnoDB 表,而在新环境中,MySQL 使用 MyISAM 表。

MyISAM 在写入操作期间需要全表锁定,而不是 InnoDB 所具有的行级锁定,因此如果您的实际站点使用与 curl 脚本相同的表,这可能会导致您的网站挂起。

相关内容