Magento 2: PHP Memory Management & Optimization Guide
Efficient PHP memory management in Magento 2 is critical to keeping your store fast and stable. Many developers overlook how Magento handles memory during long-running requests or CLI commands, which can lead to slow performance and even out of memory errors.
In this guide, you’ll learn how Magento 2 uses PHP memory, how garbage collection works, and what you can do to optimize it.
Understanding PHP Memory Management
PHP uses a dynamic memory allocation model, meaning it allocates memory on the fly for variables, arrays, and objects. Magento 2, being a large framework, heavily relies on object instantiation — especially in dependency injection, collections, and repositories.
When a request runs:
- PHP allocates memory for variables and objects.
- Once the script ends or variables go out of scope, garbage collection frees that memory.
- If garbage collection doesn’t trigger efficiently, memory leaks occur — which degrade performance.
You can check the current memory usage in Magento 2 using:
echo memory_get_usage(true);

Garbage Collection in PHP
Garbage Collection (GC) is PHP’s mechanism to automatically detect and free up memory used by circular references — like objects that reference each other.
You can control and inspect GC in Magento 2 environments:
gc_enable(); // Turn on garbage collection
gc_collect_cycles(); // Force garbage collection manually
In long-running scripts such as indexers, cron jobs, or queue consumers, triggering gc_collect_cycles() periodically can prevent memory overflow.
Magento 2 Memory Optimization Best Practices
1. Increase PHP Memory Limit
A common cause of memory-related issues in Magento 2 is reaching the PHP memory limit.
You can easily increase it in your PHP configuration file (php.ini or .user.ini):
memory_limit = 2048M
Magento recommends at least 2GB for production environments.
You can verify the setting with:
php -i | grep memory_limit
If you’ve ever encountered the “PHP Fatal Error: Allowed Memory Size Exhausted” message, check out our detailed troubleshooting guide: Fix PHP Fatal Error: Allowed Memory Size
This guide explains the root cause of the error, why it occurs in Magento 2, and several ways to prevent it permanently.
2. Use OPCache Efficiently
Enable and tune OPCache to reduce redundant memory allocations:
opcache.enable=1
opcache.memory_consumption=512
opcache.max_accelerated_files=10000
This allows PHP to reuse compiled code, minimizing memory churn.
3. Profile Memory Usage with Magento Dev Tools
Magento 2 includes built-in Profiler and Developer Toolbar options.
Enable them to identify memory-heavy operations:
bin/magento dev:profiler:enable
or use New Relic APM (see our related guide: How to Use New Relic APM with Magento 2)
to monitor memory trends in real time.
4. Use Batch Processing for Heavy Tasks
Avoid loading massive data sets into memory.
Instead, use pagination or collection chunking:
$collection->setPageSize(100)->setCurPage($page);
This keeps memory usage predictable and manageable.
5. Clean Up Object References
Unset large objects or arrays when no longer needed:
unset($largeArray);
gc_collect_cycles();
This is especially helpful in CLI or background worker scripts.
Example: Memory Profiling in Magento 2 CLI
When running heavy operations like:
php bin/magento indexer:reindex
You can profile memory usage:
echo 'Memory before: ' . memory_get_usage() . PHP_EOL;
// Run reindex logic...
echo 'Memory after: ' . memory_get_usage() . PHP_EOL;
This helps identify commands that consume excessive resources.
Bonus Tip: Monitor PHP Memory via Server Tools
Use tools like:
htoportopfor real-time monitoring.New RelicorDatadogfor APM-level insight.systemdservice limits to prevent runaway memory usage.
Optimizing PHP memory management in Magento 2 is not just about increasing limits — it’s about writing smarter, more efficient code.
By understanding how garbage collection works, using batch processing, and monitoring memory with APM tools, you can ensure your Magento 2 store runs fast and remains stable even under heavy traffic.
For deeper server optimization, check out our related guide: How to Optimize PHP-FPM for Magento 2 on Nginx