1

我有一个 CakePHP 2.2.3 应用程序,它在我们的开发服务器上运行得非常好,这是一个来自 Turnkey Linux 的 Debian Squeeze LAMP 盒子。我们正在为我们的生产服务器使用 InMotion 托管,并且将我们的代码移至该服务器是非常糟糕的。

在一个页面上测试 AJAX 功能时,我们得到了非常无用的:

致命错误:第 0 行的 Unknown 中允许的内存大小为 268435456 字节已用尽(尝试分配 389245600 字节)

tl;博士:我正在寻找有关如何调试此问题的建议

我的第一个行动方案是将控制器功能中的所有代码精简到最低限度。我的一个控制器的 index() 操作包含一行代码,但每次执行仍然以某种方式设法超过 256mb 的内存:

$this->autoRender = false;

为了将上述观点发挥到极致,我注释掉了产生此错误的模型和控制器的每一行。仍然内存不足。其他几个发出 MySQL 数据库请求的页面也显示此“内存耗尽”错误,尽管它们已完全加载。其他页面,内存错误更像是一个显示停止器并完全阻止执行。

我已经尝试将内存限制从 256 提高到 512 甚至 1024mb,这一切都是为了抑制错误消息本身。该页面不路由/渲染或做任何事情,它只是默默地失败。

在另一篇 SO 帖子的建议下,我尝试将 Debug 从 2 变为 0,这也对解决问题没有任何帮助。

我们的生产服务器上没有安装 XDebug,所以我不知道应该如何为我们的网络主机跟踪问题以解决问题。

我们使用的 VPS 是运行 Apache 2.2.23、MySQL 5.3.18 和 CakePHP 2.2.3 的 CentOS 5.8 服务器

我们的虚拟主机不能或不会提供有关该主题的任何进一步信息。他们建议我们“问问 Cake 开发者他们以前是否见过这样的东西”,我觉得这是一种非常懦弱的方式来解决问题。我希望 SO 上的某个人之前已经看到过类似的问题,并且可能能够提供帮助。

4

2 回答 2

0

我以前见过这个问题,可能是因为你没有使用 Containable 行为。在我学会设置$recursive = -1AppModel(或您正在使用的任何模型)之前,这种情况发生在我身上很多次。除非您有意管理每页的大量信息,否则您应该限制检索的数据。结合使用可包含行为$recursive

于 2013-04-04T17:12:32.543 回答
0

只是一个提示:这可能是一个会话问题。如果你在 $_SESSION 中存储太多,session_start() 可以做这样的事情,因为它必须读取你存储的所有内容。试试这个:

$_SESSION = 数组();

如果这有帮助,你会发现其余的。

于 2013-07-26T01:13:56.757 回答