我有一个CakePHP 2.2.3应用程序在我们的Dev服务器上运行得非常好,这是来自Turnkey Linux的Debian Squeeze LAMP盒子。我们正在为我们的生产服务器使用InMotion托管,并且将代码移到此服务器上是非常糟糕的。
在一个页面上测试AJAX功能时,我们得到了非常无益的帮助:
致命错误:第0行的“未知”中允许的内存大小为268435456字节(尝试分配389245600字节)
tl;博士:我正在寻找有关如何调试此问题的建议
我的第一个行动是将控制器功能中的所有代码删除到最低限度。我的一个控制器的index()动作包含一行代码,并且仍然以某种方式设法每次执行超过256mb的内存:
$this->autoRender = false;
为了将上述观点发挥到极致,我评论了模型的每一行和&生成此错误的控制器。仍在耗尽内存。发出MySQL数据库请求的其他几个页面也会显示这个“内存耗尽”错误,尽管它们完全加载。其他页面,内存错误更像是一个显示停止并完全阻止执行。
我尝试将内存限制从256提高到512甚至1024mb,所有这一切都会抑制错误消息本身。该页面不会路由/渲染或执行任何操作,它只是默默地失败。
我们的生产服务器上没有安装XDebug,所以我不知道应该如何追踪我们的网站主机来解决问题。
我们使用的VPS是运行Apache 2.2.23,MySQL 5.3.18和CakePHP 2.2.3的CentOS 5.8服务器
我们的网站管理员不能或不会提供有关此主题的任何进一步信息。他们建议我们“问问蛋糕开发者他们之前是否见过这样的东西”,我觉得这是一种非常懦弱的方式来踢罐头。我希望SO上的某位人员之前已经看过类似这样的问题,并且可能会提供帮助。
答案 0 :(得分:0)
我以前见过这个问题,可能是因为你没有使用可包含的行为。
在我学习在AppModel(或您正在使用的任何模型)上设置$recursive = -1
之前,我发生过很多次。
除非您有意识地每页管理大量信息,否则您应该限制数据的重新审核。使用Containable Behaviour和$recursive
答案 1 :(得分:0)
只是提示:它可能是会话问题。如果你在$ _SESSION中存储太多,session_start()可以做这样的事情,因为它必须读取你存储的所有狗屎。试试这个:
$ _ SESSION = array();
如果这有帮助,你会发现其余部分。