I was working on a client’s new WordPress site when I got the dreaded Linux “out of memory” error in my browser unexpectedly:
Fatal error: Out of memory (allocated 63963136) (tried to allocate 7864320 bytes) in [path]/wp-content/plugins/wordfence/lib/wfBrowscapCache.php.php on line 16388
I had never gotten this before, so I Googled around. Almost everywhere I looked, the advice was to increase your PHP and WordPress memory limits, or add memory to your server, or to remove plugins.
I didn’t want to just increase my allowable memory though. I wanted to solve the root cause of the problem. The site was running on an Amazon EC2 small instance with Amazon AMI. It should not be running out of memory!
If you want to go directly to my results, jump ahead to my recommendations. Otherwise, here’s my story:
How I Investigated This Problem
I installed the TPC! Memory Usage Plugin on my live site. [Note: I no longer recommend that plugin since it’s not maintained. Use Server IP & Memory Usage Display instead.]
I installed this plugin on my local development site as well and was totally blown away when I compared the memory usage on my local site vs. live site: the same site with the same plugins was using 34.13MB on my local server and 60.0MB on the live site. WOW!!!
How could this be? There must have been something in the server setup that caused the discrepancy. Googling some more, I read that PHP5.4 uses significantly less memory than PHP5.3, by a huge amount, on the order of cutting it in half. Sure enough, I checked and found out that my local server was running PHP5.4 while my live server was running PHP5.3. It seemed like a smoking gun, but I needed to do one more experiment to be sure.
I had another WordPress site running on Amazon EC2 with Amazon AMI, running PHP5.3. Memory usage for that was 47.8MB. After I upgraded that server to PHP5.4, it used 30.0MB. It was clear, switching from PHP5.3 to PHP5.4 saved almost 18MB of memory! That is huge!!!
My Number One Recommendation – Upgrade PHP
Based on these findings, my number one suggestion to reduce WordPress memory usage is to upgrade from PHP 5.x on your server to PHP 7.x, which is even faster and more memory-efficient. I’m now using PHP 7.0 on all of my personal sites and all of my clients’ sites.
If you are on shared hosting like GoDaddy, 1&1, Dreamhost, etc., there is often a button in the control panel to upgrade. Simple as that.
If you are running your own Linux server, it’s more complicated. Here is an article describing what I did to upgrade from PHP5.3 to PHP5.4 on Amazon AMI. (This procedure also works for upgrading to PHP5.5 and beyond). Note that there are other solutions to reducing PHP memory usage like Xcache. I’m considering that to be an advanced solution beyond the scope of this article. If you want to try that, go for it and let me know how it goes in the comments!
Be sure to re-test your site and plugins after you upgrade, as there might be some old code not compatible with PHP 7.x. I have not encountered problems with PHP 7.0 on my WordPress sites.
This Can Also Fix HTTP ERROR 500
On a different site, I was getting HTTP ERROR 500 when I tried to edit a page. Viewing pages on the front end was fine. I suspected some sort of memory issue. After trying a bunch of other stuff, I simply upgraded PHP from 7.0 to 7.1 and it solved the problem!
And Don’t Forget..
Of course, it also helps to delete unused plugins. If you want, you can install the Server IP & Memory Usage Display plugin and deactivate plugins on at a time to see their contribution to your memory usage. (Just remember to deactivate it when you’re done, because it contributes to memory usage as well). I can almost guarantee you that none will save you 18MB like switching to PHP5.5 or greater might do! But, eliminating plugins might be just enough to stop your memory errors from happening.
If you are not able to upgrade to PHP5.5+, and you can’t delete any more plugins, then you can always increase your allowable memory usage and/or get more memory for your server like the vast majority of articles recommend. The Server IP & Memory Usage Display plugin will tell you how much memory is allocated to WordPress (usually 40MB) and to PHP (usually 64MB or 128MB). You can Google around to see how to increase these limits.
But, I prefer to solve the root cause of the problem rather than treat the symptoms!
I hope my experience was helpful to you. Please comment on your findings and experiences about WordPress memory usage! – Brian