Have you met this Worker, It performs! | StudyObject

Let’s harness the power of precious CPU with Apache!

We are going to discuss PHP MPM Worker which gives a big performance boost to the user requests while doing the scaling. It is gold when it comes to supporting huge web traffic. We will dig into Apache MPM performance side !

Apache MPM  prefork and Apache MPM worker

Apache has two types of MPM

1.Prefork – It is non threaded and preforking web server (Does not do Child forking/threading on demand).

2.Worker – It is a multi-process, multi-threaded web server. Worker MPM uses multiple child processes with many threads for each child process. 

How to know whether it is Apache MPM prefork or Apache MPM Worker

Use Following command (It will show Server MPM type)

httpd -V


Server version: Apache/2.4.43 (cPanel)
Server built: May 5 2020 18:56:17
Server's Module Magic Number: 20120211:92
Server loaded: APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: worker
threaded: yes (fixed thread count)
forked: yes (variable process count)


or dump the loaded module

httpd -t -D DUMP_MODULES | grep mpm

mpm_worker_module (shared)     //if loaded module shows worker then it is MPM worker type

Prefork VS Worker

Prefork details

We will do a quick summary of apache MPM prefork, it implements non threaded and preforking web server. Apache maintains a directive named MaxRequestWorkers in its configuration which defines the Maximum number of connections that will be processed simultaneously. We suggest to choose this value based on RAM size.

Apache httpd always tries to maintain several spare or idle server processes, which stand ready to serve incoming requests. In this way, clients do not need to wait for a new child processes to be forked before their requests can be served.

Let’s discuss how exactly Apache MPM prefork uses few directives to process the requests. Following directives are used to control the request. These are configurable, I am keeping some default values to explain.

StartServers: 5                  //Apache starts 5 child processes at the moment it gets started MinSpareServers: 5      //Apache keeps minimum of 5 idle child processes MaxSpareServers: 10      //Apache keeps maximum of 10 idle child processes


MaxRequestWorkers: 256 //Maximum number of connections that will be processed simultaneously.




//It sets the upper limit on configurable number of processes. With the prefork MPM, use this directive only if you need to set MaxRequestWorkers higher than 256 (default).


Do not Miss the Gold : Why I Suggest to Use Apache MPM Worker !

Worker Details

There is difference in meaning of few directives when Apache MPM worker is in use.

ServerLimit: 16    


//Only use if MaxRequestWorkers and ThreadsPerChild needs more than 16(default) server processes. Do not set the value of this directive any higher than the number of server processes required by what you may want for MaxRequestWorkers and ThreadsPerChild.


MaxRequestWorkers: 400


//restricts the total number of threads that will be available to serve clients. 


MaxRequestWorkers  an integer multiple of ThreadsPerChild (default 25) and ServerLimit (16).


ThreadsPerChild : 25    //no of threads per child


You can compare serverlimit with no of cores, so lets say your CPU has 4 cores then Ideally you should set serverlimit as 4.

You may try to set serverlimit as 8 if 4 core supports hyper threading(Meaning CPU is 4 core/8 threads)

Try above combinations and share your experience in comment section. Apache MPM Worker makes use of precious CPU better than prefork.


Author: Rajnish K

About Author :

Rajnishk is R&D Expert ,passionate for Web Stack & an Entrepreneur . He can be reached at info@studyobject.com

StudyObject © 2020. All rights reserved.