I'm having some troubles with CPU and memory usage with an Apache Web Server.
We're running an Ubuntu Server 12.04 LTS on a Virtual Machine. Our server has following specs:
- 8GB RAM;
- 4 vCPUs (12ghz);
We configured the server to run a Drupal (7.23) based website. So we installed Apache, PHP, MySQL... The versions are below:
- Apache 2.2.22;
- PHP 5.3.10 (The PHP are running as Apache Module.);
- APC 3.1.7;
- MySQL 5.5.31 (all innodb tables);
I am running some apache modules too. Take a look (apachectl -M
):
- core_module (static)
- log_config_module (static)
- logio_module (static)
- mpm_prefork_module (static)
- http_module (static)
- so_module (static)
- actions_module (shared)
- alias_module (shared)
- authz_host_module (shared)
- deflate_module (shared)
- dir_module (shared)
- env_module (shared)
- include_module (shared)
- mime_module (shared)
- php5_module (shared)
- proxy_module (shared)
- proxy_http_module (shared)
- reqtimeout_module (shared)
- rewrite_module (shared)
- setenvif_module (shared)
- ssl_module (shared)
- status_module (shared)
On apache2.conf, we have this config:
Timeout 90
KeepAlive On
MaxKeepAliveRequests 80
KeepAliveTimeout 5
HostnameLookups Off
LogLevel warn
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 30
MaxClients 120
MaxRequestsPerChild 1000
</IfModule>
The Virtual Host of my site:
<VirtualHost *:80>
ServerName blabla.bla.bla
ServerAdmin bla@bla.com
DocumentRoot /l/disk0/site/public_html
<Directory />
AllowOverride None
</Directory>
<Directory /l/disk0/site/public_html>
Options MultiViews Indexes Includes FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
LogLevel warn
ErrorLog "/l/disk0/site/logs/apache/site/error.log"
CustomLog "/l/disk0/site/logs/apache/sit/access.log" combined
SSLProxyEngine on
RewriteEngine on
RewriteLog logs/rewrite_www_log
RewriteLogLevel 0
Include rewrites-www.conf
</VirtualHost>
Drupal Modules:
- ACL 7.x-1.0
- APC - Alternative PHP Cache 7.x-1.0-beta4
- Boost 7.x-1.0-beta2
- Cache Expiration 7.x-2.0-beta2
- CAPTCHA 7.x-1.0
- Chaos tool suite (ctools) 7.x-1.3
- Date 7.x-2.6
- Domain Access 7.x-3.10
- Domain Blocks 7.x-2.0
- Domain CTools 7.x-1.3
- Domain Locale 7.x-1.0-beta3
- Domain Taxonomy 7.x-3.x-dev (2012-abr-29)
- Domain Views 7.x-1.5
- Embed Views Display 7.x-1.2
- Entity API 7.x-1.2
- Entity reference 7.x-1.0
- IMCE 7.x-1.7
- IMCE Mkdir 7.x-1.0
- Internationalization 7.x-1.10
- Link 7.x-1.1
- Localization update 7.x-1.0-beta3
- Media 7.x-1.3
- Meta tags quick 7.x-2.7
- Newsletter 7.x-1.0-beta9
- Options Element 7.x-1.9
- Page Style 7.x-1.0
- Panels 7.x-3.3
- Pathauto 7.x-1.2
- pathologic 7.x-2.11
- profile2 7.x-1.3+0-dev (2013-mai-24)
- select_or_other 7.x-2.19
- sheetnode 7.x-1.0-beta4+3-dev (2013-mai-25)
- SMTP Authentication Support 7.x-1.0
- Token 7.x-1.5
- Transliteration 7.x-3.1
- Variable 7.x-2.3
- Views 7.x-3.7
- Vocabulary Permissions Per Role 7.x-1.0
- Webform 7.x-3.19
- Webform Validation 7.x-1.2
- workbench 7.x-1.2
- workbench_access 7.x-1.2
- workbench_media 7.x-1.1
- workbench_profile 7.x-1.1
- xmlsitemap 7.x-2.0-rc2
My site is simple and don't have many visitors. I am talking about 500 visitors a day maybe. Can Drupal use so much CPU? Or is it a module?
Other problem is memory usage. When a process is created, 80M is allocated for apache2. I think is too much.
My problem is that CPU (all cores) have a high utilisation. Most of time, it's hitting between 90% and 100% usage! The offending process is the apache2. Memory is also consumed without pity. Of a 8GB total, the consumed memory is about 6.5GB to 7.5GB. I don't know if my apache configuration is wrong or if I'm really need more hardware (I guess not). Drupal can cause high CPU load?
When the CPU usage hits 100%, the site goes down and we have to restart apache. I did a workaround solution with Drupal using APC and installing Boost. had some effectiveness, but CPU utilisation still high. Very high.
If you need more information, like Drupal modules and PHP extensions. Please let me know.