博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2928|回复: 1

Apache性能优化

[复制链接]
发表于 2010-1-29 16:49:55 | 显示全部楼层 |阅读模式
配置网站,要充分的把系统资源利用出去,榨干系统的一切潜能,让网站速度发挥到极致。Apache,是用户浏览和网站数据的一个中间桥梁。但是在这里,我们虽然做得并不是很多,但是如果心细打理,有些设置也会起到立竿见影的效果。
1、安装Apache的时候,要正确选择MPM
要想让Apache的性能最好,那么第一步要做到的是:选择合适的MPM。
Apache有3个MPM,它们分别是:event、prefork和worker。
其中,event这个MPM比较适用于有大量连续连接的情况。KeepAlive的好处是,可以同一个TCP连接中相应多次请求:这种方式,可以使一个包含大量图片的HTML文档加速50%。在Apahce配置文件httpd.conf中设置KeepAlive为On,就可以启动KeepAlive。
prefork是一个非线程的MPM,。它的特点是:虽然不是很快,但是很稳定。它能够隔离每个请求,所以,如果某个请求出现故障,不会影响其它请求。使用prefork最重要的一个参数是MaxClients。这个MaxClients数值要足够大,这样可以在访问高峰时发挥很好的性能;但是同时又不能太大,致使Apache所需内存超出物理内存的大小。
worker是Apache2版本中新开发的MPM,速度比prefork快很多。而且,由于使用多线程进行访问处理,所以能够处理相对海量的请求,而系统资源的占用也要小于基于进程的服务器。worker是Apache 2的主要使用方式。worker有两个比较重要的配置参数,那就是:ThreadsPerChild和MaxClients。ThreadsPerChild用来控制每个子进程允许建立的线程数,ThreadsPerChild用来控制允许建立的总线程数。
那么,这3个MPM要如何选择呢?如果需要更好伸缩性,可以选用worker或event(因为它们是线程化的MPM);如果需要更加好的稳定性和兼容性(比如要适应一些旧的软件),可以选用prefork。《从prefork到worker:修改ubuntu apache工作模式》

如果你仍然无法评估自己的需求,仍然不知道应该选择哪个MPM,那么就推荐使用worker。
2、Apache配置优化
在Ubuntu中,Apache主要配置文件是/etc/apache2/apache.conf,以下就针对这个文件来配置。
(1)关闭DNS查询
HostnameLookups在默认情况是已经被设置为off,务必保持该设置。如果需要统计客户端DNS,那么可以使用第三方软件来实现。
(2)优化MaxClients
Apache2启动的时候会创建一些进程(配置文件中的StartServer设定的数目),并保持一个最大的MaxClients数;每一个超过该数目的连接请求,都会排队等待。
这个MaxClients设置,是和MPM相关的。在apache.conf中,既有针对prefork的MaxClients设置,也有针对worker的。前者在<IfModule mpm_prefork_module>段,后者在<IfModule mpm_worker_module>段。这里以woker为例,原配置为:
<IfModule mpm_worker_module>
StartServers          2
MaxClients          150
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   0
</IfModule>
MaxClients如果要设置超过256的话,就需要同步修改ServerLimit的数值,因为ServerLimit的默认值是256.比如这里需要配置为1024:
<IfModule mpm_worker_module>
StartServers          10
ServerLimit         1024
MaxClients          1024
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   0
</IfModule>
那么,要怎么才能知道是不是需要增大MaxClients呢?可以查看Apache2的错误日志文件/var/log/apache2/error.log,如果发现如下内容,就应该增大MaxClients了:
[error] server reached MaxClients setting,consider raising the MaxClients setting
(3)优化KeepAlive
Apache的KeepAlive这个指令指定一段时间,在这段时间内,可以让服务器和客户端之间持同一个连接。这个特性,有其好处,也有其坏处。好处是,如果客户端发出多个请求,服务端不必每次都花时间去创建连接。坏处就是,这段时间内,即使客户端不再发出新的请求、访问新的页面,这个连接也会被占用,这对服务器资源来说是一种浪费。
在默认情况下,KeepAlive是设置为On的,KeepAliveTimeout设置为15秒。也就是说,在15秒之内,服务器平均每秒连接到150个不同的连接,那么从理论上讲,服务器将同时有15×150=2250个连接,内存消耗比较严重。
那么我们要如何来优化KeepAlive呢?
a、可以禁用KeepAlive(设置为 Off);
b、将KeepAliveTimeout改小,比3或者5秒。
(4)启用压缩优化Apache
在 Apache1.3中,有个gzip模块。在Apache2中,没有了gzip,有一个新的模块叫做deflate。这个模块可以在用户访问网站时实时将内容进行压缩,然后再传给客户端。因为压缩比较高(测试结果显示,其压缩比最高可达97%,最少也有40%),所以deflate能够极大地加速网站,节约带宽。当然,压缩是要花费CPU时间的。
要启用该模块,运行以下命令:
sudo a2enmod deflate
sudo /etc/init.d/apache2 force-reload
该模块有一个配置文件:/etc/apache2/mods-enabled/deflate.conf,可以配置要压缩的文件类型。默认配置为:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>
上面配置较为合理,因为一般情况下,不需要对图片、PDF和mp3等文件进行压缩,那是很费资源的事情。关于deflate,这里不详细介绍。
(5)禁止apache不必要的日志
Apache写日志是比较消耗资源的,如果没必要存储日志信息,推荐还是关闭此功能。
(6)使用缓存(mod_cache)提高apache性能
apache2有两种缓存模块:一种是基于硬盘的,另外一种是基于内存的。前者由mod_disk_cache实现,后者由mod_mem_cache实现,不过它们都需要mod_cache的支持。在基于内存的缓存方式中,还有一个mod_file_cache模块,它是用于搭配mod_mem_cache模块使用的。
之后文章将继续涉及这部分内容,这里就不详细介绍,如有需要,可以参考apache的文档。
3、使用反向代理
通过“反向代理”的方式,可以极大地提高web服务器的相应能力。Squid是一个不错的代理、反向代理服务器,大家可以去了解了解。
通过以上合适的配置,Apache就能够最大限度的挖掘系统资源了!
版权所有,转载请注明: 转载自阿里窝|阿里家族的窝
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-11-24 10:47 , Processed in 0.085682 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表