Apache服务器性能如何优化?

配置网站,要充分的把系统资源利用出去,榨干系统的一切潜能,让网站速度发挥到极致。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有两个比较重要的配置参数,那就是:ThreadsPerChildMaxClientsThreadsPerChild用来控制每个子进程允许建立的线程数,MaxClients 用来控制允许建立的总线程数。

那么,这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中,既有针对preforkMaxClients设置,也有针对worker 的。前者在段,后者在段。这里以woker为例,原配置为:

StartServers 2

MaxClients 150

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0

MaxClients如果要设置超过256的话,就需要同步修改ServerLimit的数值,因为ServerLimit的默认值是256.比如这里需要配置为1024:

StartServers 10

ServerLimit 1024

MaxClients 1024

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0

那么,要怎么才能知道是不是需要增大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,可以配置要压缩的文件类型。默认配置为:

AddOutputFilterByType DEFLATE text/html text/plain text/xml

上面配置较为合理,因为一般情况下,不需要对图片、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就能够最大限度的挖掘系统资源了!