代码改变世界

优化Apache的配置

2012-08-13 09:46  java环境变量  阅读(480)  评论(0编辑  收藏  举报

优化Apache的配置

 

1.  关闭DNS查询

默认在/etc/apache2/apache.conf的文件中,HostnameLookups在默认情况下已经被设置为off,如果有开启的话,每次客户端发送访问需求时,Apache都要花时间去获取客户的域名,并记录在日志中,如果默认设置为off,日志中只记录IP地址。

如果Apache在分析配置文件时用到了DNS解析,你的服务器会发生可靠性的问题(也可能根本无法启动)。

2.    设置MaxClients

在Apache启动时,会创建一些进程,并保持一个最大的MaxClient数,当客服端请求超过这个请求就会排队等待。

  以worker模块为例,设置MaxClients,

sudo vi /etc/apache2/apache.conf

默认apache原来的配置是:

image

现在修改配置为:

image

StartServers表示Apache2启动时创建的进程数,MaxClients由150设置为256,这里需要注意的是,当MaxClients设置超过256的话,就需要同步修改ServerLimit的数值,默认ServerLimit的数值是256。假如都设置为400:

如果不知道是不是该设置服务器MaxClinets,可以通过查看apache2的错误日志文件(/var/log/apache2/error.log),如果错误文件中出现

[error] server reached MaxClients setting,consider raising the MaxClients setting

说明应该增大MaxClients了,注意不是上一节也提到了,maxClients的数不是设置的越大越好,当MaxClients越大,apache的需要的内存也就越大,当超过系统的物理内存,可能会出现宕机的想象。

3.  优化KeepAlive

Apache的KeepAlive这个指令指定一段时间,在这段时间内,可以让服务器和客户端之间持同一个连接。这个特性,有其好处,也有其坏处。好处是,如果客户端发出多个请求,服务端不必每次都花时间去创建连接。坏处就是,这段时间内,即使客户端不再发出新的请求、访问新的页面,这个连接也会被占用,这对服务器资源来说是一种浪费。

在默认情况下,KeepAlive是设置为On的,KeepAliveTimeout设置为15秒。也就是说,在15秒之内,服务器平均每秒连接到 150个不同的连接,那么从理论上讲,服务器将同时有15×150=2250个连接,内存消耗比较严重。

关于apache进程数和占用内存的公式

Apache进程数 = KeepAliveTimeout * 每秒种HTTP请求数 / 平均KeepAlive请求
Apache占用内存 = 总Apache进程数 * 平均每进程占用内存数

$   sudo vi /etc/apache2/apache.conf

   image    image

优化KeepAlive的办法:

  • 可以直接禁用KeepAlive(设置为off)
  • 将keepAliveTimeOut改小点,比如设置为3秒或5秒左右

  如果KeepAliveTimeout修改为3秒,则上述的例子同时连接数就会降低为768,内存的开销的优化也是相当明显的。

4.  启用压缩

   在apache2中有一个模块叫deflate,这个模块可以在用户访问网站的实时将内容进行压缩,然后再传给客户端。因为压缩比较高,所以deflate能够极大地加速网站,节约带宽,当然压缩也是需要花费cpu的时间的。

启动该模块,运行命令:

$    sudo a2enmod  deflate

$    sudo  /etc/init.d/apache2  force-reload

这个模块有一个配置文件/etc/apache2/mods-enabled/deflate.conf可以配置要压缩的文件类型。默认配置是:

image

默认不需要对图片、PDF、MP3等文件进行压缩,上述的配置较合理,不需要做什么改动。

如果想压缩个别类型以外的所有文件,可以这样设置:

SetOutputFilter  DEFLATE

SetEnvIfNoCase   Request_URI   \.(?:gif|jpe?g|png)$ no-gzip   dont-vary

上述表示除了图片(gif,jpg,png)以外的所有文件都压缩。

通过我本机的测试,普通的html网页可以压缩70%以上。

5.  禁用不必要的日志

  apache本身在写日志是比较消耗资源的,apache为了节省打开文件的时间,将日志文件的状态始终保持在打开状态,但在写文件日志也要花费不少的时间,

如果没有必要存储日志信息,还是在配置文件将不必要的日志相关行注释掉。

6.  使用缓存(mod_cache)

使用apache的缓存模块,对于网站的内容长期保持不变,或blog的内容不经常发生变动使用此模块。

apache的缓存方式有两种:一种是基于内存的;另一种是基于硬盘的;

基于硬盘是由mod_disk_cache实现,而基于内存是由mod_mem_cache实现,在基于内存实现还需要一个mod_file_cache模块

    mod_disk_cache示例

  •    启动mod_disk_cache

$   sudo  a2enmod  disk_cache

  • 配置apache中虚拟主机的文件

     这里以blog.mytest.com虚拟主机配置文件为例

$   sudo vi /etc/apache2/sites-available/blog.mytest.com

     在文件的</VirtualHost>之前加入一下内容:

image

   这里第一行表示Cache类型为disk,将由mod_disk_cache负责实现,根目录“/”表示网站的根目录。

   第二行表示要对/var/www/blog.mytest.com/cache目录进行缓存。

  第三行表示网站生成的cache至少保留2个小时。

  第四行表示最大失效周期是一周。

  • 修改网站的用户

$   sudo  mkdir  /var/www/blog.mytest.com/cache

$   sudo   chown  www-data.www-data   /var/www/blog.mytest.com/cache

  • 重启apache

$   sudo   /etc/init.d/apache2  restart

最后通过浏览器就可以访问该虚拟主机了,可以在cache目录中看到apache生成的缓存内容了。

   基于内存的设置与基于硬盘的设置大体相似,但本人不建议使用内存缓存,比较系统的内存是比较宝贵的

 

http://jordy.easymorse.com/?p=365