How To Install PHP 7.4 and PHP 7.3 ON Ubuntu 18.04/19.04/16.04

banner image

How to control high traffic load on Apache servers : optimization performance of APACHE2 & PHP-FPM


Everyone handle high traffic loads on Apache server. During down-time they forget to check server memory. Apache not used lot of memory still server not responding. All time we restart Apache service and all things will start working good.

I also faced same issue numerous time and all-time used same solution : Restart Apache.

After lots of research and reading found one solution. In this blog you see step-by-step guide to apache2 performance settings.

System environment:

Intel(R) Xeon(R) CPU 3.10GHz, 4 cores | 8GB RAM

Ubuntu 16.04

Apache2 version using mpm_event

PHP FPM (5.6,7.1)


First,  Calculate process size :

Download : python script file “ps_mem.py” from Github

Open this and
ps_mem.py file upload on you server : 
https://github.com/raj412/ps_mem

chmod a+x ps_mem.py
sudo python ps_mem.py


Output like this: 

See here : 12 Apache processes, consuming a total of  35.7MiB, so each Apache process is using roughly 3MiB of RAM. The 42 php-fpm process use 2GB will use so each php-fpm using roughly 50MiB of RAM.

  

Next, Calculate Apache MaxRequestWorkers: 

I’ll reserve nearly 15% of memory for all other processes.
Round up Apache process size to 3MiB.

MaxRequestWorkers = (Total RAM - Memory used for Linux, DB, etc.) / process size


MaxRequestWorkers = (8192MB - 1400MB) / 3MB = 2264 


Last, Calculate php-fpm max-children

Round up php process size to 50MiB.

maxclients = (Total RAM - Memory used for Linux, DB, etc.) / process size 


maxclients = (8192MB - 1400MB) / 50MB = 135.84

 

Detailed Setup

In the /etc/apache2/mods-enabled/mpm-event.conf

<IfModule mpm_*_module>

ServerLimit (Total RAM - Memory used for Linux, DB, etc.) / process size
      StartServers           (Number of Cores)
      MinSpareThreads      25
      MaxSpareThreads     75
      ThreadLimit             64
      ThreadsPerChild       25
MaxRequestWorkers (Total RAM - Memory used for  Linux, DB, etc.)/ process size
    MaxConnectionsPerChild   1000

</IfModule>

Default settings did not contain the “ServerLimit”, so add it there.

In the /etc/php/7.1/fpm/pool.d/www.conf change the following settings:

pm = dynamic
pm.max_children         (total RAM - (DB etc) / process size)

pm.start_servers        (cpu cores * 4)
pm.min_spare_servers    (cpu cores * 2)
pm.max_spare_servers    (cpu cores * 4)
pm.max_requests         1000
 

 

Final settings:


8GB RAM and 4 CPUs à 3.7GHz. My average Apache process has 3MB, an average PHP process takes 50MB.

/etc/apache2/mods-available/mpm_event.conf

<IfModule mpm_event_module>
        ServerLimit              2264
        StartServers             4
        MinSpareThreads          25
        MaxSpareThreads          75
        ThreadLimit              64
        ThreadsPerChild          25
        MaxRequestWorkers        2264
        MaxConnectionsPerChild   1000
</IfModule>



/etc/php/7.1/fpm/pool.d/www.conf

pm = dynamic
pm.max_children = 136
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.max_requests = 1000

Save your settings and restart your apache and php-fpm processes.

sudo service apache2 restart
sudo service php7.1-fpm restart
How to control high traffic load on Apache servers : optimization performance of APACHE2 & PHP-FPM How to control high traffic load on Apache servers : optimization performance of APACHE2 & PHP-FPM Reviewed by Raj on December 19, 2018 Rating: 5

2 comments:

  1. This comment has been removed by a blog administrator.

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete

Powered by Blogger.