我有一个将大变量传递给视图的控制器,但在给定上下文的情况下没有任何不合理的事情(PHP使用大约100 MB的RAM)。
我的问题是DebugKit会生成一个大型临时文件,需要大量内存才能在下次运行时反序列化:
app\tmp\cache\cake_toolbar_cache7ee836dd8c8f85f0f69f716bad0bbd94
这与Solution to Fatal error - Allowed memory size exhausted in CakePHP FileEngine.php中描述的问题相同,只是我的文件在每次加载页面时都会增长。无论我让PHP分配多少内存,它最终都会超出系统能够处理的限制。我需要手动删除文件并重新开始。
我不完全确定DebugKit试图处理的确切数据是什么,但该文件似乎包含顶级数字数组,每个子数组都包含我的数据集的完整副本。我怀疑它可能是请求历史记录。
我已经确认当调试级别为零并且DebugKit没有加载时没有内存问题,因此它不会成为生产中的问题,但它会在开发过程中继续运行。有一个简单的解决方法吗?
答案 0 :(得分:1)
一些彻底的测试证实它确实是"历史"面板。该面板可在您的控制器中配置,因此我们可以:
缩短历史记录:
public $components = array(
'DebugKit.Toolbar' => array('history' => 2),
);
禁用历史记录:
public $components = array(
'DebugKit.Toolbar' => array(
'panels' => array(
'history' => false,
),
),
);
我用第二种方法得到了更好的结果,而且我还没有使用历史。