我在使用Apache Web Server加载内存时遇到一些麻烦。
我们正在虚拟机上运行Ubuntu Server 12.04 LTS 。 我们的服务器有以下规格:
我们configuration服务器运行一个基于Drupal(7.23)的网站 。 所以,我们安装了Apache,PHP,MySQL …版本如下:
我也运行一些Apache模块 。 看看( apachectl -M ):
在apache2.conf上 ,我们有这个configuration:
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>
我的网站的虚拟主机 :
<VirtualHost *:80> ServerName blabla.bla.bla ServerAdmin [email protected] 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模块:
我的网站很简单,没有很多访问者。 我每天都在谈论500名游客。 Drupal可以导致这么多的CPU加载? 还是一个模块?
其他问题是内存使用情况。 当一个进程被创build时,80M被分配给apache2。 我觉得太多了。
我的问题是,CPU(所有内核)有一个高负载。 大部分时间,击中90%和100%的负载! 违规的过程是apache2 。 记忆也消耗无遗憾。 总共8GB,消耗的内存大约是6.5GB到7.5GB 。 我不知道如果我的Apacheconfiguration是错误的,或者如果我真的需要更多的硬件(我猜不是)。 Drupal可以导致高CPU负载?
当CPU负载达到100%时,站点closures,我们必须重新启动Apache。 我用Drupal使用APC和安装Boost做了解决方法。 有一些有效的,但CPU负荷仍然很高。 很高。
如果你需要更多的信息,比如Drupal模块和PHP扩展。 请告诉我。
其他问题是内存使用情况。 当一个进程被创build时,80M被分配给apache2。 我觉得太多了。
那是真的还是虚拟的内存? 老实说,这不是很多; 更重要的是,你应该把重点放在解决引起问题的事情上,而不是你认为应该是不同的东西。
如果你希望Apache进程占用较less的内存,你应该禁用模块(因为每一个都需要更多的代码在内存中)。 但是,如果你需要启用所有的模块,那么就是这样。
我在pipe理内存受限的机器时使用的一种方法是将某些任务从Apache移到其他服务器,以便我可以分别调整它们。
但更简单的方法是改变
MaxClients 120
为您的工作量更合理:
如果我们考虑重写访问和主站点stream量,我们每分钟有大约70个请求。 现在,我们有33个传入连接。
我会马上回来,但如果你只处理33个并发请求,你不需要120个工人!
MaxClients 40
而且,您应该将MinSpareServers和MaxSpareServer分别调整为5和10。 没有必要有30名工人坐在一起无所事事。
现在,回到
如果我们考虑重写访问和主站点stream量,我们每分钟有大约70个请求。 现在,我们有33个传入连接。
如果你有33个并发请求,但你每分钟只做70个,有两种可能:
如果#1是这样的话,我真的不知道如何去帮助 – 有些事情是非常错误的,所以错误的我甚至不知道该从哪里告诉你开始寻找。
如果它是#2,我猜你是从你的服务器提供所有的静态资产(图像,js,css,字体)。 最好把它们放在CDN上,但是如果你真的做不到,你可以在它们上面设置超长的caching时间,并重新打开Varnish。 如果你正在使用Apache进程和PHP以及其他一些东西来提供静态文件,那么你正在浪费资源 – 用更简单的方法来做到这一点!
我的问题是,CPU(所有内核)有一个高负载。 大部分时间,击中90%和100%的负载! 违规的过程是apache2。
这是一个固定的数字,还是只有当你服务的请求?
磁盘I / O如何查看( iostat -mhx 2 )? MySQL在做什么( show processlist; )?
您的服务器对于您所描述的内容极度不满意。 这是一个好消息,因为这意味着你应该能够解决这个问题。
我面临同样的问题。 将您的网站内容下载到本地计算机,并使用更新的反病毒扫描内容。 在我的情况下,罪魁祸首是木马病毒。 在我的网页内容清理病毒后,我的问题得到解决。