×


Apache Performance Tuning via MPM Directives

Are you trying to configure MPM directives?

This guide is for you.


Apache 2 introduced Multi-Processing Modules, or MPMs. The MPMs change the basic functionality of the web server.

Here at Ibmi Media, as part of our Server Management Services, we regularly help our Customers to perform Apache related configurations.

In this context, we shall look into how to configure MPM directives on Apache.


Importance of Apache MPM directives ?

Generally, Apache use the default configuration but they don't know how Apache works, how it handles an incoming connection or multiple processes.

So Apache 2 introduced Multi-Processing Modules or MPMs.

Their main job is to change the basic functionality of the webserver. They do this by modifying how Apache listens to the network, accepts, and handles requests.

The different MPM modules are Prefork, Worker, Event, and other MPMs. let's just take a glimpse of those MPM modules.


Prefork MPM:

It launches multiple child processes. Each child process handles one connection at a time. Also, it uses high memory in comparison to worker MPM.

Prefork uses high memory when compared to worker MPM. By default, Prefork MPM is used by the Apache2 server. Also, it always runs a few minimum (MinSpareServers) defined processes as spare, so new requests do not need to wait for a new process to start.


Worker MPM:

It generates multiple child processes similar to prefork. Each child process runs many threads. Each thread handles one connection at a time.

This MPM implements a hybrid multi-process multi-threaded server. Moreover, Worker MPM uses low memory in comparison to Prefork MPM.


Event MPM:

It was introduced in Apache 2.4. It is pretty similar to worker MPM but it designed for managing high loads.

This MPM allows more requests to be served simultaneously by passing off some processing work to supporting threads. Using this MPM Apache tries to fix the ‘keep alive problem’ faced by other MPM.


How to configure MPM directives ?

Here we will look at how to configure the MPM directives.


Core-managed CentOS 6/7 Servers

On CentOS servers, Apache configuration files are located in /etc/httpd/:

1. First, we log in to the server over SSH or FTP.

2. Next, we create an optimization file. It is necessary for the optimization file to be loaded last so that it will override all other previous settings. We name the file as z-optimize.conf.

touch /etc/httpd/conf.d/z-optimize.conf

3. Then we open the file with vim editor:

vim /etc/httpd/conf.d/z-optimize.conf

4. Now we input necessary directive change, using IfModule statements for compatibility.

5. Finally, we save the file and reload Apache.

service httpd restart

 

Core-managed Ubuntu 14.04/16.04 LTS Servers

On Ubuntu servers, Apache configuration files are located in /etc/apache2/.

1. First, we backup existing apache2.conf file:

cp -p /etc/apache2/apache2.conf{,.bak.$(date +%F_%H%M%S)}
ls -lah /etc/apache2/apache2.conf*

2. Next, we open the file using vim editor:

vim /etc/apache2/apache2.conf

3. Then we append the necessary directive changes to the very bottom of the config file.

4. Finally, we save the file and reload Apache.

apache2ctl reload

 

Fully-managed CentOS 6/7 cPanel Servers

cPanel users handle all configurations by using the WHM and cPanel interfaces. Moreover, it is simple to set up an optimization configuration file. Also, there are two ways to compose an optimized configuration file via the command line over SSH/FTP or within the WHM interface.


a. Command Line Method (SSH/FTP)

The Apache configuration files on cPanel servers are stored in: /usr/local/apache/conf/includes/


However, we can use several included files for optimization. Also, it is necessary for the optimization file to be loaded last so that it will override all other previous settings.


i. First, we log in to the server with SSH or FTP.

ii. Next, we open the post_virtualhost_global.conf file using vim editor.

vim /usr/local/apache/conf/includes/post_virtualhost_global.conf

iii. Then we input the necessary directive change, using IfModule statements for compatibility.

iv. Finally, we save the file and reload Apache.

/scripts/restartsrv_apache

To Reload Apache PHP FPM servers, execute:

/scripts/restartsrv_apache_php_fpm

 

b. WHM Method

1. First, we log in to Webhost Manager (WHM).

2. Next, we type apache in the quick find box and click on Apache Configuration in the Service Configuration section.

3. Then we click on Include Editor.

4. After that, we scroll down to Post VirtualHost Include.

5. Here, we select All Versions from the drop-down.

6. In the box, we input the necessary directives for optimization.

configure mpm directives

7. Then we click the Update button when finished to save the change.

8. On the left-hand navigation pane in the Restart Services section at the bottom, we click on HTTP Server(Apache).

9. Then we click on the Yes button.

10. Back to the left-hand navigation pane in the Restart Services section at the bottom, we click on PHP-FPM services for Apache.

11. Finally, we click on the Yes button to complete the configuration.


[Need urgent assistance with Apache queries? – We are here to help you. ]


Conclusion

This guide will help you to configure #MPM directives in the #Apache server. You can simply configure MPM #directives by logging into the server and create an optimization file and add the necessary directive change. 

Starting with Apache 2.0, Apache extended its features with a selection of Multi-Processing Modules (#MPMs), which are responsible for binding to #network ports on the machine, accepting and handling the requests. These modules determine the basis of how Apache addresses multi-processing.

To know which MPM Apache is using:

1. Enable Apache mod_info.

2. Query the mod_info url, typically curl localhost/server-info.

3. The "Server Settings" section will show "MPM Name: #Worker"

4. Run httpd -V again. It will still show prefork, not worker.