Friday, May 29, 2015

apache 2.2 - How to decide on VPS good defaults for PHP and Wordpress when it comes to memory?



I have (only) 512MB to spare. The only thing running on my VPS is PHP/MySQL and on top of it Wordpress. No mail server or any other application, just Wordpress and LAMP stack.



How to decide how much memory to give to PHP and Wordpress? Right now PHP is allowed to have 128MB, how much is safe amount to increase it? I've tried to Google the question but never really found any answers.


Answer



TL;DR - Don't bump your memory limits for the sake of it. For a standard PHP application like WordPress, 128MB is huge and should be enough for 90% of your needs.




However, there are a few important facts here:



PHP Memory Allocation is per-script/process



As per the PHP documentation for the max_memory option:




This 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.





An important distinction to make is that this setting doesn't set the amount of memory that is available to all PHP processes - it sets the maximum available memory for one PHP process.



When Apache receives a request for a PHP page, it forks a PHP process, which dies as soon as its work is done. Any memory used during that request is then released back to the OS and the entire cycle starts again with the next request.



You should never have to tweak the max_memory settings unless you are seeing "Out of memory" errors from PHP itself, and that generally only happens when you:




  1. Are working with large data-sets, which if you're running a WordPress website I extremely doubt.


  2. Have a memory leak or other problem which means that memory isn't being released back to the OS, and the correct response to this type of problem is to investigate the source problem, rather than just bumping limits.



Apache Tuning



If you're interested in tweaking for performance, you should look at the Apache MaxClients and associated options within the prefork module.



I would typically reserve 50MB for the kernel and other system processes, and dice up the rest for Apache and MySQL - there are various online guides detailing how to do this (which I strongly suggest that you read), but the general idea is:





  1. Run top and check how much memory is used by your average Apache process (this is the RES column)

  2. Take your total memory, subtract the amount you want to reserve for other processes, and divide by the number above. This is the number of simultaneous connections that Apache can handle before it will need to turn clients away.

  3. Edit your Apache configuration and set the MaxClients option to this number.



Note I mentioned simultaneous connections above, not visitors on your website. The two are not the same.


No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...