How do I tell if apache is running (or configured to run) as prefork or worker?
The MPM is configured at compile time. One way to figure it out afterwards is to list compiled in modules. That list will include the chosen MPM. The listing can be accomplished running the apache binary, with the -l flag.
andreas@halleck:~$ apache2 -l Compiled in modules: core.c mod_log_config.c mod_logio.c worker.c http_core.c mod_so.c andreas@halleck:~$
Here we find the module worker.c, hence I'm running the worker MPM.
The answers given by Series8217 and Andol are both incorrect.
The question was, how to tell if Apache is running prefork or worker. The advice given by the other answers only tells what the default MPM is (based on compiled-in modules), not if that default or another choice is being used at the present time.
httpd -V shows prefork, that just means prefork is the compiled-in default MPM. That can be overridden by changing an Apache configuration file setting, as shown in this process:
- Edit the configuration file (e.g.
/etc/sysconfig/httpdon CentOS / RedHat)
- Add or uncomment this line:
- Restart Apache
Which MPM is actually running can be shown using this process:
- Enable Apache mod_info
- Query the mod_info url, typically
- The "Server Settings" section will show "MPM Name: Worker"
httpd -Vagain -- it will still show prefork, not worker
httpd -Vshows the default option, not which option is actually in use
There are answers on many, many web sites saying, use
httpd -V to tell if Apache is running prefork or worker. They are all wrong. Try the above procedure to see for yourself.
In Ubuntu 14.04
You can change it by adding symbolic links for
Only one is allowed in a time.
On RedHat and derivates, just launch
ps aux and look at the httpd process name:
httpdmeans Apache is running as prefork
httpd.workermeans it is running as worker
On RHEL/Fedora/etc, run
httpd -V. You will get some output which includes the following:
Server version: Apache/2.2.21 (Unix) ... Architecture: 64-bit Server MPM: Prefork ...
Here 'Server MPM' is 'Prefork', so my server is running the prefork MPM.
Chris Johnson is correct. Go to httpd.conf => add this line:
<Location /server-info> SetHandler server-info </Location>
Restart apache: /etc/init.d/httpd restart. Then access localhost/server-info by your browser and look at MPM Name section.
Here's another method that I expect should be reliable in determine which MPM is in use. Add the following to your
<IfModule prefork.c> Header append X-MPM prefork </IfModule> <IfModule worker.c> Header append X-MPM worker </IfModule>
Then check the headers using
curl -I localhost | grep X-MPM.
One way that I figure it out in Debian like distros, is by running:
apachectl -V | grep -i mpm
The answer from Chris Johnson is right.
After enabling the info module, as documented in the Apache Documentation (http://httpd.apache.org/docs/2.2/mod/mod_info.html), this one liner will give you the MPM you're using:
links -dump http://localhost/server-info/?server | grep "MPM Name"
on centos (or rhel) you can run this command:
ps -ef | grep httpd
if you see
/usr/sbin/httpd.worker running, then it is using the worker MPM. if you see
/usr/sbin/httpd running, then it is using prefork