EasyCorp / EasyAdminBundle

EasyAdmin is a fast, beautiful and modern admin generator for Symfony applications.
MIT License
4.06k stars 1.02k forks source link

PHP's memory limit with EasyAdminBundle #1161

Closed appyapp closed 8 years ago

appyapp commented 8 years ago

Hi Javier,

First of all, thanks to you to provide such an amazing bundle. It's really quite esay to configure and use. But I would like to have your advice on something that disturb me. I created a backend with my three entities :

I did some configuration on the fields shown in list, search,edit,show views. When I try to clear the cache of all my application (in order to override a FOSUser Template for example), I reach the limit of allowed memory for PHP, which is 128MB. I passed it to 256M for the CLI and the cache is cleared without warnings. To resolve memory limit problem, the popular answer is to do what I've done : increase the memory. But for my point of view, it doesn't resolve an unoptimized script... So, is it normal to reach the memory limit with cache:clear in a dev environment and with EasyAdminBundle ? What will happen in the production environment? Will I need 128M or 256M ?

And if you can enlighten where the error comes from, I paste you the output of the command :


c:\wamp\www\calendario-deportivo>php bin/console cache:clear -vvv

 // Clearing the cache for the dev environment with debug true
 // Clearing outdated warmup directory...
 // Warming up cache...

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 26 bytes) in C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php on line 71

Call Stack:
    0.0002     238288   1. {main}() C:\wamp\www\calendario-deportivo\bin\console:0
    0.0298    2278176   2. Symfony\Component\Console\Application->run() C:\wamp\www\calendario-deportivo\bin\console:29
    0.0351    2552648   3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:117
    0.3412   15103024   4. Symfony\Component\Console\Application->doRun() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Application.php:80
    0.3416   15104008   5. Symfony\Component\Console\Application->doRunCommand() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:186
    0.3482   15341784   6. Symfony\Component\Console\Command\Command->run() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:807
    0.3486   15343824   7. Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand->execute() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Command\Command.php:256
    0.4027   15778296   8. Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand->warmup() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand.php:96
    7.4046   52871904   9. Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate->warmUp() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand.php:144
   39.9103  112740368  10. Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheWarmer->warmUp() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate.php:48
   48.7918  132852000  11. Twig_Environment->loadTemplate() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheWarmer.php:39
   48.7926  132862448  12. Twig_Environment->compileSource() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Environment.php:396
   48.8112  133291144  13. Twig_Environment->parse() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Environment.php:667
   48.8112  133291144  14. Twig_Parser->parse() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Environment.php:615
   48.8314  133828528  15. Twig_NodeTraverser->traverse() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Parser.php:121
   48.8461  133829528  16. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:64
   48.8462  133831200  17. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8462  133832112  18. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8462  133832808  19. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8463  133833624  20. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8489  133862536  21. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8490  133863360  22. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8527  133946976  23. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8527  133947712  24. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8527  133948624  25. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   48.8527  133949552  26. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80

And sometimes I get this error:


c:\wamp\www\calendario-deportivo>php bin/console cache:clear -vvv

 // Clearing the cache for the dev environment with debug true
 // Clearing outdated warmup directory...
 // Warming up cache...

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 64 bytes) in C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeVisitor\SafeAnalysis.php on line 55

Call Stack:
    0.0002     238288   1. {main}() C:\wamp\www\calendario-deportivo\bin\console:0
    0.0270    2278176   2. Symfony\Component\Console\Application->run() C:\wamp\www\calendario-deportivo\bin\console:29
    0.0325    2552648   3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:117
    0.3357   15103024   4. Symfony\Component\Console\Application->doRun() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Application.php:80
    0.3361   15104008   5. Symfony\Component\Console\Application->doRunCommand() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:186
    0.3429   15341784   6. Symfony\Component\Console\Command\Command->run() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:807
    0.3433   15343824   7. Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand->execute() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\Console\Command\Command.php:256
    0.8473   15778296   8. Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand->warmup() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand.php:96
    5.2737   52868512   9. Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate->warmUp() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand.php:144
   27.6128  112740928  10. Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheWarmer->warmUp() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate.php:48
   35.0526  132841064  11. Twig_Environment->loadTemplate() C:\wamp\www\calendario-deportivo\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheWarmer.php:39
   35.0532  132851512  12. Twig_Environment->compileSource() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Environment.php:396
   35.0722  133275024  13. Twig_Environment->parse() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Environment.php:667
   35.0722  133275024  14. Twig_Parser->parse() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Environment.php:615
   35.0937  133812432  15. Twig_NodeTraverser->traverse() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\Parser.php:121
   35.1095  133813432  16. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:64
   35.1096  133815104  17. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1096  133816016  18. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1097  133816712  19. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1098  133817528  20. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1128  133846440  21. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1128  133847264  22. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1179  133953816  23. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1180  133954640  24. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1181  133955416  25. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1181  133956272  26. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1182  133957096  27. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1185  133966984  28. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1186  133967064  29. Twig_BaseNodeVisitor->leaveNode() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:87
   35.1186  133967064  30. Twig_NodeVisitor_Escaper->doLeaveNode() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\BaseNodeVisitor.php:40
   35.1186  133967064  31. Twig_NodeVisitor_Escaper->escapePrintNode() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeVisitor\Escaper.php:63
   35.1186  133967064  32. Twig_NodeVisitor_Escaper->isSafeFor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeVisitor\Escaper.php:83
   35.1186  133967112  33. Twig_NodeTraverser->traverse() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeVisitor\Escaper.php:125
   35.1186  133967400  34. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:64
   35.1186  133969248  35. Twig_NodeTraverser->traverseForVisitor() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:80
   35.1186  133969248  36. Twig_BaseNodeVisitor->leaveNode() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeTraverser.php:87
   35.1186  133969248  37. Twig_NodeVisitor_SafeAnalysis->doLeaveNode() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\BaseNodeVisitor.php:40
   35.1186  133969616  38. Twig_NodeVisitor_SafeAnalysis->setSafe() C:\wamp\www\calendario-deportivo\vendor\twig\twig\lib\Twig\NodeVisitor\SafeAnalysis.php:75

Thanks in advance,

Pierre

javiereguiluz commented 8 years ago

@appyapp I'm sorry about this issue. I've never experienced anything similar ... but once we got a report from some user who suffered this. The good news is that the next stable version of the bundle (to be released very soon) has changed completely the wat we process configuration. This has solved some issues for some people and it may help here too.

As a side comment, it looks like this error is because of the "template cache warmer", which compiles all the Twig templates when you do a cache clear with a warm up. Have you tried to disabled this bundle and see if the error persist? Thanks!

appyapp commented 8 years ago

@javiereguiluz When I disable the EasyAdminBundle, I don't hit the memory limit. I tried various test case like: 1 - Loading the bundle without SubCategory Entity : memory limit fatal error 2 - Loading the bundle without SubCategory and Category Entities: memory limit fatal error 3 - Loading the bundle with the defaults entity parameters, i.e :

entity:
    - AppBundle\Entity\Race
    - AppBundle\Entity\Subcategory
    - AppBundle\Entity\Category

Memory Limit Fatal Error 4- Loading the bundle wihout defining entities : Memory Limit Fatal Error So, I uninstalled and reinstalled the bundle, but without changes...

If I remember well, the error had the same origin, the template cache warmer.

I hope the next stable version will improve that small issue. I guess for the moment I have to increase the memory limit. Thanks for your quick response !