Кэш панели инструментов 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,
            ),
        ),
    );
    

Я получил лучшие результаты со вторым подходом, и я все равно не использовал историю.

Другие вопросы по тегам