Кэш панели инструментов DebugKit исчерпывает память
У меня есть контроллер, который передает большие переменные в представление, но ничего лишнего, учитывая контекст (PHP использует около 100 МБ ОЗУ).
Моя проблема в том, что DebugKit генерирует большой временный файл, который требует много памяти для десериализации при следующем запуске:
app\tmp\cache\cake_toolbar_cache7ee836dd8c8f85f0f69f716bad0bbd94
Это та же проблема, что описана в разделе " Решение фатальной ошибки" - допустимый объем памяти исчерпан в CakePHP FileEngine.php, за исключением того, что мой файл увеличивается при каждой загрузке страницы. Независимо от того, сколько памяти я позволю выделять PHP, в конечном итоге она превысит предел, который может обработать система. Мне нужно удалить файл вручную и начать все сначала.
Я не до конца уверен в том, какой именно фрагмент данных пытается обработать DebugKit, но файл, как представляется, содержит числовой массив верхнего уровня, каждый из которых содержит полную копию моего набора данных. Я подозреваю, что это может быть история запросов.
Я подтвердил, что нет проблем с памятью, когда уровень отладки равен нулю, а DebugKit не загружается, поэтому это не будет проблемой в Production, но он встанет у меня на пути при разработке. Есть ли простое исправление?
1 ответ
Некоторое тщательное тестирование подтвердило, что это действительно была панель "История". Эта панель настраивается в вашем контроллере, поэтому мы можем:
Сделать историю короче:
public $components = array( 'DebugKit.Toolbar' => array('history' => 2), );
Отключить историю:
public $components = array( 'DebugKit.Toolbar' => array( 'panels' => array( 'history' => false, ), ), );
Я получил лучшие результаты со вторым подходом, и я все равно не использовал историю.