【发布时间】:2018-11-17 10:02:09
【问题描述】:
我在 Laravel 中有一个控制器方法,它在运行时冻结整个站点 - 例如,在运行时尝试加载任何页面只会挂起,直到函数完成执行。
所以我尝试将其分解以查看问题所在,我怀疑是数据库锁定等,但最后我尝试了一些新的东西并得出了一个意想不到的结论 - 函数中发生的事情无关紧要!
我将方法的全部内容替换为sleep(30);,30 秒后,整个站点不可用。
所以我猜想一些资源正在跨应用程序共享,所有其他页面都必须等待该方法执行后才能运行。
我的问题是,为什么会发生这种情况,我如何具体找出有问题的资源是什么?
【问题讨论】:
-
信息不足。分享该功能的代码,分享您的日志等
-
在网站6年后,你应该知道不要在没有相关代码的情况下发帖。
-
它可能会阻塞会话。你可以使用
session_write_close()来解决这个问题。 -
也许将您的站点剥离为两个非常基本的 php 页面,一个带有 echo、sleep 和 echo,一个带有 echo。它仍然阻塞吗?
-
I replaced the entire contents of the method with sleep(30);这个实验毫无价值——它只是表明sleep()正在按照规范工作。您需要调试真实代码而不是睡眠功能。将一堆echo microtime(true);语句放入有问题的代码中,看看代码的哪些部分产生了最高的延迟。