During the Contributor Day at the WordCamp Europe 2022, the Hosting Team found that WP_MEMORY_LIMIT is set as 40 MB (single site) and 64 MB (multisite). Furthermore, the WP_MAX_MEMORY_LIMIT is set as 256 MB.
WP_MEMORY_LIMIT is the value for the WordPress Memory Limit, usually referred to the frontend memory, and WP_MAX_MEMORY_LIMIT is the value for the PHP Memory Limit, usually referred to the backend memory.
History
Around September 2013, the WP_MEMORY_LIMIT value changed from 32 MB to 40 MB (32+8). Some tests done by the Hosting Team suggest that the memory used on WordPress is around 16 MB.
The PHP memory_limit sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server. Note that to have no memory limit, set this directive to -1. Check the PHP page for more information.
PHP values
The first part gets the value from PHP, and if not exists, sets a default value. Thereafter, if the value is incorrect (in bytes) sets the memory limit from the constant.
This PHP value has evolved:
- PHP <5.1.0 (2005-11-24): valued at 8 MB (view archive.org page)
- PHP =5.2.0: valued at 16 MB
- PHP >5.2.0 (2008-12-12): valued at 128 MB (view archive.org page)
Some questions
Why change the WP_MEMORY_LIMIT value?
To level it to the PHP standard.
If the hoster has some kind of limitation, misconfiguration, an incorrect value or does not allow changing it, the value used is the lesser, of 40 MB, which usually produces memory errors, when it should use the PHP default value, which is generally acceptable in new installations. At this time, 20 latest versions of WordPress (since WordPress 4.1 / 2014-12-17) can use PHP 5.6.40+ so it would meet the minimums set by PHP.
Can, actually, the value be greater than the PHP value?
Yes. That’s why there is an intent to include something like:
WP_MEMORY_LIMIT <= WP_MAX_MEMORY_LIMIT <= memory_limit
Premises
We should keep in mind some basic assumptions when incorporating PHP memory limits based on what users can do.
The memory limit set by computer systems are set for a reason. And that reason should be enforced; therefore, PHP’s memory limit should not be exceeded, and in case it needs to be exceeded, it should be changed by the system administration.
Users can set the values they want from the wp-config.php configuration file. Often, extremely high values are set to hide a memory consumption problem due to bad programming. With a few visits it usually works, but it is a short-term fix.
We must be realistic about the memory limits of the WordPress Core and the normal use of a WordPress, whether it is a simple WordPress or a WordPress Multisite. Most WordPress sites install plugins and themes that make memory spikes higher.
PHP has its baseline memory limits that should serve as a reference for its use and application.
Proposal
Considering that since 2008, and PHP >5.2.0 the memory_limit value is equal to 128 MB, should we consider an update of this value in the WordPress base configuration, or at least an update of the values?
The proposal from the WordPress Hosting team is for WP_MEMORY_LIMIT:
- WordPress Single:
define('WP_MEMORY_LIMIT', '128M'); - WordPress Multisite:
define('WP_MEMORY_LIMIT', '192M');
Another patch should be:
WP_MEMORY_LIMIT <= WP_MAX_MEMORY_LIMIT <= memory_limit
Users can modify the WP_MEMORY_LIMIT and WP_MAX_MEMORY_LIMIT at wp-config.php and should have some limitations in values, as far as WordPress cannot overflow PHP.
Getting the values
When doing some calls to PHP functions and values, got this:
- php.ini:
memory_limit-> value:256M - function:
memory_get_usage-> value:2097152 - updating the
ini_set memory_limitto512M-> value:memory_limit = 256M - function:
ini_get_all[memory_limit]
Array ( [global_value] => 256M [local_value] => 512M [access] => 7 )
So, the real values are, always, in the ini_get_all[memory_limit].
After doing some tests, maybe hard-coding the values is a bad idea, but having some “limits” is cool (like now) but reading the real values.
Ticket: 56390 Updating WP_MEMORY_LIMIT
Props: @javiercasares, @crixu, @bernardzijlstra, @mikeschroder.