Question

How to fix apache high CPU usage on Ubuntu

In the past, I used to managed a WordPress site on DigitalOcean droplet (One-click app) with 2 vCore, 4GB of memory, Ubuntu 16.04, Apache 2.4.18, and mysql community version 5.7.29.

Then the website was transferred to a droplet with 2 vCore, 4GB of memory, Ubuntu 18.04, Apache 2.4.29, and mysql community version 8.0.20.

Instantly after went live on the new droplet apache (“apache2 -k start” on htop) started to spike CPU to 30 and 40% and down to 0 to 3% and then after a few moments up again, and down again.

This is how the average graphs looks like (more or less): ||||___| the old server, it used to look like this -----------------.

Both were one-click WordPress servers from DigitalOcean with default settings. Also, in the old server, the CPU usage with the same and sometimes even more load was always a flat line of 3 to 6%.

  1. Why is this problem happening?
  2. How to troubleshoot the problem?
  3. How to fix the problem?

Submit an answer


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

alexdo
Site Moderator
Site Moderator badge
May 15, 2020
Accepted Answer

Hello, @mhweb

What you can do is to monitor the droplet’s performance and check from where the CPU usage is coming from. Apache might be consuming more resources if the traffic to your sites is bigger as well.

The thing is the issue might not be related with your website itself and you might experiencing the speed issues because your server is running low on memory. That is why it’s important to make sure that everything is operating normally.

You can also examine the logs for any killed processes as this will help you to see if the server is killing processes in order to remain stable. You can check this by looking at the /var/log/messages and search for kill, e.g

grep -i kill /var/log/messages

You can also check for out of memory (The OOM Killer) references in the log to see if the system is critically low on memory. This usually indicates that you need to upgrade if there are a lot of references.

grep -i oom /var/log/messages

You can exacute top or htop via ssh to see what process is taking the most CPU or memory. Both tools are really handy when it comes to monitor the server’s performance. I would like to mention that top comes installed by default and you might need to install htop.

For Ubuntu:

```sudo apt-get install htop``

Top provides a simple, real-time table of your processes, with the largest consumers on top. Running htop, we can see that it has a similar output, but is colorized, and is more interactive:

There is a really useful tutorial you can check on how to use top, htop, netstat, du and other tools to Monitor Server Resources:

https://www.digitalocean.com/community/tutorials/how-to-use-top-netstat-du-other-tools-to-monitor-server-resources

You can also use sar to check what’s going on your droplet. With sar, you can monitor performance of various Linux subsystems (CPU, Memory, I/O…) in real time.

You can use it like this:

To check the memory usage (Free and Used ):

sar -r

To check the cpu usage:

sar -u

You can also check this tutorial for monitoring the CPU usage on your droplet:

https://www.digitalocean.com/community/tutorials/how-to-monitor-cpu-use-on-digitalocean-droplets

You can also track the performance with the Droplet Graphs which are available in your control panel. You can find more information here:

https://www.digitalocean.com/docs/droplets/how-to/graphs/

Another thing that you could try using is this script here which summarizes your access logs. It would summarize your access log and give you the following information:

  • Top 20 POST requests
  • Top 20 GET requests
  • Top 20 IP logs and their geo-location

Another thing that could be causing the high CPU load is a cron job or any other scheduled task. I would recommend checking your crontab and reviewing your cron jobs. To do that you can run this command here:

  1. crontab -l

Hope that this helps!

Regards, Alex

I’m having the same issue. From what I can tell the MySQL process was out of control. I don’t have an answer to how to fix this.

alexdo
Site Moderator
Site Moderator badge
February 26, 2021

Hello @dittoasnar

Could you please elaborate more on the current issue that you’re experiencing?

Regards, Alex

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel