Bobcares

Apache high memory usage – 5 easy ways to fix it

by | Mar 31, 2019

Apache is popular, but it often gets a bad rap for poor performance.

Apache high memory usage is found to cause slow sites, page timeouts, and more.

And here at Bobcares, our Support Engineers help web hosts, digital marketers and other online businesses keep their Apache servers super fast and stable.

Today, we’ll go through the top 5 reasons we’ve seen for Apache high memory usage and how we fix them.

 

How to reduce Apache’s high memory usage?

Apache comes with a lot of default settings.

And, these default settings can unintentionally become one of the major causes for the high memory usage.

Firstly, let’s take a look at the Multi Processing Module (MPM) of Apache.

For e.g., By default, most Apache softwares come with Prefork module. But, for high traffic servers Worker MPM is the better option. So, by tweaking the settings as per the actual requirement of the customer, we can reduce the memory usage and increase the performance.

Note – Apache settings are subjective to web-traffic volume and system resources. So, prior to making changes, there needs to be a careful analysis.

It is at this point that things can get really technical.

Let’s take a look at how we reduce Apache high memory usage at Bobcares.

[Do you know that Apache optimization helps you to get best out of your server? We can do Apache performance tuning in your server.]

 

1. Minimize Simultaneous Connections

When simultaneous connections increases, the amount of RAM Apache uses also increases.

Some of the parameters that we tweak to reduce the number of simultaneous connections are :

  • MaxClients
  • MaxSpareServers
  • MinSpareServers
  • StartServers
  • MaxRequestsPerChild
  • KeepAlive
  • KeepAliveTimeout
  • TimeOut

For e.g., MaxClients sets the limit on the number of simultaneous requests that can be supported by Apache webserver. So, if it is too high, it can overload the memory. We calculate an ideal value for MaxClient based on the available RAM and process size.

Similarly, KeepAlive is used to keep a single connection alive to transfer all the files to load a page. This saves the time in establishing a new connection for each file and helps to speed up Apache. But while the connections are kept open, they occupy RAM that could be used for other services.

So, to ensure there is no resource wastage, we set the value of KeepAliveTimeout to 2-5 seconds in low-traffic and 10 seconds in high-traffic webservers.

And, when dealing with live Apache servers, any tweak will have a wide impact. That’s why, our Dedicated Engineers always do rigorous testing using Apache load testing tools like ‘ab‘.

Click here to have our experts preform these tweaks while constantly monitoring for any configuration issues that may pop up.

 

2. Replace Prefork with Worker MPM

Prefork is the default module for Apache. It uses multiple child processes. Each child handles one connection at a time.

But the memory usage with Prefork is high.

So, if you have a high traffic, then the corresponding memory usage will be excessive.

In such cases, Worker MPM is the better option. It uses multiple child processes with many threads each. Each thread handles one connection at a time. So, the memory footprint is comparatively lower.

 

3. Reduce the number of modules

Many users may not even bother about optimization initially when setting up Apache. They go ahead with adding many modules.

As a result, Apache server ends up with a long list of modules, while you may not actually need all of them.

And Apache loads all these modules to server memory. This can further slow down your server.

For e.g., Consider the following modules which are loaded by default on CentOS 6.x.

  • proxy_balancer_module (shared)
  • proxy_ftp_module (shared)
  • proxy_http_module (shared)
  • proxy_ajp_module (shared)
  • proxy_connect_module (shared)
  • cache_module (shared)

If any of these are not needed, we can disable them to reduce the memory usage.

NOTE – Before you disable modules, ensure to keep a backup. In this way you can revert the changes if needed. Also, along with disabling  modules, make the corresponding changes in the config file. Otherwise it may show errors. If you would rather have us do these optimizations for you, then click here to talk to our experts.

 

4. Reduce Log level

Apache generates a lot of log info depending on how busy the site is.

If you have alternate ways to gather visitor data (eg. Google Analytics), the memory usage can be reduced by logging only error messages instead of all access logs.

Another alternative is to use Piped Logging, where Apache passes the log data to an external process (like logrotate). This can also minimize Apache’s memory footprint.

One of the best method that we follow here is to raise the log level only when troubleshooting a critical issue. And, after collecting the logs, our Support Engineers revert back the configuration.

 

5. Optimize PHP and MySQL

Web servers rarely function alone. It works in sync with the database servers too. And often, an issue with the underlying PHP or MySQL is taken as memory issue with Apache.

So, if even after making the configuration tweaks in Apache doesn’t resolve the high memory usage, we look for the probable cause in other places.

For e.g., By default Apache uses mod_PHP. But, by using PHP-FPM we can limit the memory consumption and also improve performance.

Similarly, in MySQL we can adjust the Key buffer size, Query Cache, Table Cache parameters etc., to reduce the memory usage.

 

Conclusion

Apache high memory usage can have an adverse effect on performance of websites. In this post, we have discussed the various techniques our experts at Bobcares use to reduce the high memory usage.

PREVENT YOUR SERVER FROM CRASHING!

Never again lose customers to poor server speed! Let us help you.

Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.

SEE SERVER ADMIN PLANS

var google_conversion_label = "owonCMyG5nEQ0aD71QM";

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

Never again lose customers to poor
server speed! Let us help you.

Privacy Preference Center

Necessary

Necessary cookies help make a website usable by enabling basic functions like page navigation and access to secure areas of the website. The website cannot function properly without these cookies.

PHPSESSID - Preserves user session state across page requests.

gdpr[consent_types] - Used to store user consents.

gdpr[allowed_cookies] - Used to store user allowed cookies.

PHPSESSID, gdpr[consent_types], gdpr[allowed_cookies]
PHPSESSID
WHMCSpKDlPzh2chML

Statistics

Statistic cookies help website owners to understand how visitors interact with websites by collecting and reporting information anonymously.

_ga - Preserves user session state across page requests.

_gat - Used by Google Analytics to throttle request rate

_gid - Registers a unique ID that is used to generate statistical data on how you use the website.

smartlookCookie - Used to collect user device and location information of the site visitors to improve the websites User Experience.

_ga, _gat, _gid
_ga, _gat, _gid
smartlookCookie
_clck, _clsk, CLID, ANONCHK, MR, MUID, SM

Marketing

Marketing cookies are used to track visitors across websites. The intention is to display ads that are relevant and engaging for the individual user and thereby more valuable for publishers and third party advertisers.

IDE - Used by Google DoubleClick to register and report the website user's actions after viewing or clicking one of the advertiser's ads with the purpose of measuring the efficacy of an ad and to present targeted ads to the user.

test_cookie - Used to check if the user's browser supports cookies.

1P_JAR - Google cookie. These cookies are used to collect website statistics and track conversion rates.

NID - Registers a unique ID that identifies a returning user's device. The ID is used for serving ads that are most relevant to the user.

DV - Google ad personalisation

_reb2bgeo - The visitor's geographical location

_reb2bloaded - Whether or not the script loaded for the visitor

_reb2bref - The referring URL for the visit

_reb2bsessionID - The visitor's RB2B session ID

_reb2buid - The visitor's RB2B user ID

IDE, test_cookie, 1P_JAR, NID, DV, NID
IDE, test_cookie
1P_JAR, NID, DV
NID
hblid
_reb2bgeo, _reb2bloaded, _reb2bref, _reb2bsessionID, _reb2buid

Security

These are essential site cookies, used by the google reCAPTCHA. These cookies use an unique identifier to verify if a visitor is human or a bot.

SID, APISID, HSID, NID, PREF
SID, APISID, HSID, NID, PREF