Skip to main content
Blackboard Help

Optimization: Apache

If you are a Managed Hosting customer, this topic doesn't apply to you.

Starting with Learn 9.1 April 2014, Blackboard Learn no longer supports Apache 1.3 web server. If your deployment requires a web server, Apache 2.2 can be used. The instructions can be found in config/apache2/README.txt file under the Blackboard Learn install. Apache 2.2 is required if Shibboleth authentication provider is used.

If you're using a version of Blackboard Learn 9.1 between SP 8 and SP 14, Blackboard recommends swapping out the shipped Apache 1.3 Web server for an external Apache 2.2 distribution. As noted above, this is required for Blackboard Learn 9.1 April 2014 and later.

Process model in Apache

Apache 1.3 serves requests using preforked processes. When the server’s parent process is started, it forks a number of child processes that are responsible for accepting connections on the listening sockets. When a connection is received, the system wakes up one of the processes to handle the connection.

Apache 2.x supports pluggable concurrency models called Multi-Processing Modules (MPMs). When building Apache, you must choose MPM. Two of the important MPMs are Worker MPM and Prefork MPM. Worker MPM uses multiple child processes, each with multiple threads. Each thread handles one connection at a time. Worker is generally a good choice for high-traffic servers because it has smaller memory footprint than Prefork MPM. Prefork MPM uses multiple child processes with one thread each. Each process handles one connection at a time. Prefork is comparable in speed to worker, but it uses more memory. Prefork's threadless design can be used with non-thread-safe third-party modules and it is easier to debug on platforms with poor thread debugging support.

Apache 2.2 runs with Prefork MPM as the default. Follow the below instructions to switch to Worker MPM. Blackboard recommends using the Worker MPM.

To determine which MPM is running:
/usr/sbin/apachectl –l
To determine if Apache has Worker MPM compiled in:
/usr/sbin/httpd.worker –l
Uncomment HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd
Restart Apache


The KeepAlive extension to HTTP/1.0 and the persistent connection feature of HTTP/1.1 provide long-lived HTTP sessions. They allow same TCP connections to be used by multiple requests. Performance tests have shown reduced latency times. As a result, Blackboard recommends leaving the default setting, KeepAlive On in httpd.conf.

KeepAliveTimeout specifies the amount of time the server waits for subsequent requests on a persistent connection. This directive is set to 5 by default. Blackboard’s internal tests suggest increasing the value to 15 for optimal performance.

Estimating MaxClients for optimal performance

MaxClients sets the limit on simultaneous requests so connection attempts beyond the configured number ofMaxClients are queued. MaxClients defaults to 256 with the Prefork MPM and 400 (ServerLimit multiplied by the value of ThreadsPerChild) for the Worker MPM. Blackboard recommends setting MaxClients to 200 as a starting point. When using the Prefork MPM, ServerLimit must always be the same as MaxClients.

Use the formula below to achieve a more precise calculation of MaxClients.The formula aligns to the tunable capacity of Tomcat application server. MaxClients must not exceed the MaxThreads configured bybbconfig.appserver.maxthreads.

MaxClients = minimum(
“RAM Memory allocated to Apache Web server” /
“Max child process size”,

To calculate the Max child process size, use the following command during a server busy time.

ps -ylC httpd --sort:rss

It is also important to ensure that you have enough RAM memory on the server for Apache by using the below formula:

“RAM Memory dedicated to Apache Web server” =
MaxClients * “Max child process size”

An example configuration for the Worker MPM:

<IfModule worker.c>
StartServers         2
MaxClients         200
MinSpareThreads     25
MaxSpareThreads     75
TreadsPerChild      25
MaxRequestsPerChild  0

An example configuration for the Prefork MPM:

<ifmodule prefork.c>
StartServers              8
MinSpareServers           5
MaxSpareServers          20
ServerLimit             200
MaxClients              200
MaxRequestsPerChild    4000


Compresses content before it is delivered to the client. Blackboard recommends enabling the extension by following the Apache 2.2 documentation.