Apache性能优化---全面篇

原创 2012年03月28日 09:09:14

配置网站,要充分的把系统资源利用出去,榨干系统的一切潜能,让网站速度发挥到极致。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就能够最大限度的挖掘系统资源了!


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Web性能优化之Apache篇

一直以来, 实现强制https的方法是使用Apache的rewrite模块来进行重定向, 这样存在几个问题, 第一是性能问题, 第二是可能遇到不支持https的客户端…..等等, 便有此文

全面介绍网站性能优化之数据库及服务器架构实现负载均衡等实用知识

这篇关于网站性能优化主要从[负载均衡、服务器架构、数据库扩展」的角度,提出一些性能优化的建议,以供有建设中大型网站需求的网友们作为参考。1、Web Server 与 DB Server 分离小型网站或...

Apache优化全面详细教程

  • 2014-10-22 15:01
  • 36KB
  • 下载

Android应用性能全面优化

一: android程序的优化主要分为4种优化:启动速度方面,UI卡顿方面,内存泄漏方面,内存溢出方面二:下面依次对这四个方面进行大概介绍1.启动速度:不应在Applicati以及Activity的...

PHP性能全面优化分享

一、规范说明 性能是网站运行是否良好的关键因素, 网站的性能与效率影响着公司的运营成本及长远发展,编写出高质高效的代码是我们每个开发人员必备的素质,也是我们良好的职业素养。 二、影响性能的因素...

关于UITableView的性能优化(历上最全面的优化分析)

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)ind...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)