2017-01-17 1 views
1

J'ai un contrôleur qui transmet de grandes variables à une vue, mais rien de déraisonnable étant donné le contexte (PHP utilise environ 100 Mo de RAM).Le cache de la barre d'outils DebugKit épuise la mémoire

Mon problème est que DebugKit génère un grand fichier temporaire qui nécessite beaucoup de mémoire à unserialize sur la prochaine course:

app\tmp\cache\cake_toolbar_cache7ee836dd8c8f85f0f69f716bad0bbd94 

Il est le même problème décrit à Solution to Fatal error - Allowed memory size exhausted in CakePHP FileEngine.php, sauf que mon dossier pousse sur chaque page charge. Peu importe la quantité de mémoire allouée par PHP, elle finira par dépasser la limite que le système est capable de gérer. J'ai besoin de supprimer le fichier manuellement et recommencer. Je ne suis pas tout à fait sûr de l'élément de données que DebugKit essaie de gérer, mais le fichier semble contenir un tableau numérique de premier niveau, dont chacun contient une copie complète de mon ensemble de données. Je soupçonne que ce pourrait être l'historique des demandes .

J'ai confirmé qu'il n'y a pas de problème de mémoire lorsque le niveau de débogage est zéro et que DebugKit ne se charge pas, cela ne posera aucun problème en production, mais il se poursuivra pendant le développement. Y a-t-il une solution simple?

Répondre

1

Certains tests approfondis ont confirmé qu'il s'agissait bien du panneau "Historique". Ce panneau est configurable dans votre contrôleur afin que nous puissions:

  • raccourcir l'histoire:

    public $components = array(
        'DebugKit.Toolbar' => array('history' => 2), 
    ); 
    
  • Désactiver l'historique:

    public $components = array(
        'DebugKit.Toolbar' => array(
         'panels' => array(
          'history' => false, 
         ), 
        ), 
    ); 
    

je suis arrivé de meilleurs résultats avec la deuxième approche et je n'utilisais pas l'histoire de toute façon.