How To Optimize Apache

Share
Speed up your ApacheSpeed up your Apache HTTP Server

Hello everyone, you can optimize Apache in Ubuntu in this quick guide, before you do that, I hope you are all having a great week so far. As I type, it’s raining heavily here and it is some much needed rain. We have had a long drought that looks like it has finally ended! Anyway, please read on…

Today we will teach you how to easily optimize your Apache server for wordpress, drupal including high traffic websites that can cause Apache to be slow or worse, crash! This also gives me an opportunity to remind some of you that you really can stop DDOS attacks on your server by checking out that tutorial. Anyway, let us begin.

Optimize Apache Web Server

MaxKeepAliveRequests and KeepAliveTimeout

Apache documentation using HTTP Keep Alive’s can improve performance by as much as 50%. These two directives are important and should always be on. You can always change them to any value you desire. The default value of MaxKeepAliveRequests is 100 and the default value of KeepAliveTimeout is 15.

The recommended value for MaxKeepAliveRequests can be between 50 and 75.

The recommended value for KeepAliveTimeout can be between 1 and 5.

MaxClients

This directive allows you to set the limit on connections that will be served simultaneously. Every new connection will be queued up after this limit. It is available with Prefork and Worker both MPM. The default value of it is 256.

LimitRequestFields

It helps us to set a limit on the number of HTTP request’s header fields that will be accepted from the clients. Its default value is 100. It is recommended to lower this value if DDos attacks are occurring as a result of so many http request headers.

Example of optimization:

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0

Timeout

Usually this value doesn’t require editing and a default of 300 is sufficient. Lowering the Timeout value will cause a long running script to terminate earlier than expected. On virtualized servers like VPS servers, lowering this value to 100 can help improve performance.

KeepAlive

This setting should be On unless the server is getting requests from hundreds of IPs at once. High volume and/or load balanced servers should have this setting disabled (Off) to increase connection throughput.

MaxKeepAliveRequests

This setting limits the number of requests allowed per persistent connection when KeepAlive is on. If it is set to 0, unlimited requests will be allowed. It is recommended to keep this value at 100 for virtualized accounts like VPS accounts. On dedicated servers it is recommended that this value be modified to 150.

KeepAliveTimeout

The number of seconds Apache will wait for another request before closing the connection. Setting this to a high value may cause performance problems in heavily loaded servers. The higher the timeout, the more server processes will be kept occupied waiting on connections with idle clients.

It is recommended that this value be lowered to 5 on all servers.

[contentblock id=3 img=adsense.png]

MinSpareServers

This directive sets the desired minimum number of idle child server processes. An idle process is one which is not handling a request. If there are fewer spareservers idle then specified by this value, then the parent process creates new children at a maximum rate of 1 per second. Setting this parameter to a large number is almost always a bad idea.

The recommended values for this setting are:

Virtualized server, ie VPS 5
Dedicated server with 1-2GB RAM 10
Dedicated server with 2-4GB RAM 20
Dedicated server with 4+ GB RAM 25

MaxSpareServers

The MaxSpareServers directive sets the desired maximum number of idle child server processes. An idle process is one which is not handling a request. If there are more than MaxSpareServers idle, then the parent process will kill off the excess processes.

The MaxSpareServers value should be set as double the value that is set in MinSpareServers.

StartServers

This directivesets the number of child server processes created on startup. This value should mirror what is set in MinSpareServers.

MaxClients

This directive sets the limit on the number of simultaneous requests that will be served. Any connection attempts over the specified limit will be queued. Once a process is freed at the end of a different request, the queued connection will then be served.

For virtualized servers such as VPS accounts, it is recommended to keep this value at 150. For all dedicated servers the recommended value for this setting is 250.

MaxRequestsPerChild

This directive sets the limit on the number of requests that an individual child server process will handle. After the number of requests reaches the value specified, the child process will die. When this value is set at 0, then the process will never expire.

The recommended value for this setting are:

Virtualized server, ie VPS 300
Dedicated server with 1-4GB RAM 500
Dedicated server with 4+GB RAM 1000

Other Linux tutorials: How to install ionic framework on Ubuntu, How to update Ubuntu & How to backup files on Ubuntu