hum*_*ngs 5 performance memory central-processing-unit php5 apache-2.2
I am having some troubles with CPU loading an memory with Apache Web Server.
We are running a Ubuntu Server 12.04 LTS on a Virtual Machine. Our server have the following specs:
We configured the server to run a Drupal (7.23) based website. So, we installed Apache, PHP, MySQL... The versions are below:
I am running some apache modules too. Take a look (apachectl -M
):
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
Drupal Modules:
My site is simple and don't have many visitors. I am talking about 500 visitors a day maybe. Drupal can cause so much CPU loading? Or 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 load. Most of time, hitting between 90% and 100% load! 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 load 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 load still high. Very high.
If you need more information, like Drupal modules and PHP extensions. Please let me know.
另一个问题是内存使用。创建进程时,为apache2分配了80M。我觉得太多了。
那是真实内存还是虚拟内存?老实说,这不是很多。更重要的是,您应该专注于修复导致问题的事情,而不仅仅是您“认为”应该不同的事情。
如果您希望 Apache 进程占用更少的内存,您应该禁用模块(因为每个模块都是需要在内存中的更多代码)。但是,如果您需要已启用的所有模块,那么,仅此而已。
我在管理内存受限机器时使用的一种方法是将某些任务从 Apache 移到其他服务器上,这样我就可以单独调整它们。
但更简单的方法是改变
MaxClients 120
Run Code Online (Sandbox Code Playgroud)
对你的工作量更合理的东西:
如果我们考虑重写访问和主站点流量,我们每分钟大约有 70 个请求。现在,我们有 33 个传入连接。
我会暂时回过头来,但如果您只处理 33 个并发请求,则不需要 120 个工作人员!
MaxClients 40
Run Code Online (Sandbox Code Playgroud)
您可能应该分别调低MinSpareServers
和MaxSpareServer
调至 5 和 10 之类的值。没有必要让 30 名工人坐在那里无所事事。
现在,回到
如果我们考虑重写访问和主站点流量,我们每分钟大约有 70 个请求。现在,我们有 33 个传入连接。
如果您有 33 个并发请求,但每分钟只处理 70 个,则有两种可能性:
如果 #1 是这种情况,我真的不知道如何提供帮助 - 有些事情非常错误,所以错误我什至不知道从哪里开始寻找。
如果它是 #2,我猜你正在从你的服务器提供你所有的静态资产(图像、js、css、字体)。最好把这些放在 CDN 上,但如果你真的做不到,你可以在它们上设置超长的缓存时间,然后重新打开 Varnish。如果您将 Apache 进程与 PHP 和一大堆其他东西一起使用来提供静态文件,那么您就是在浪费资源 - 用更简单的方法来做到这一点!
我的问题是 CPU(所有内核)的负载很高。大多数情况下,达到 90% 到 100% 的负载!有问题的进程是apache2。
这是一个常数,还是仅在您处理请求时?
磁盘 I/O 看起来如何 ( iostat -mhx 2
)?MySQL 在做什么 ( show processlist;
)?
对于您所描述的内容,您的服务器已被大大压倒了。这是个好消息,因为这意味着您应该能够解决这个问题。
归档时间: |
|
查看次数: |
61152 次 |
最近记录: |