优化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原来的配置是:
现在修改配置为:
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
优化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可以配置要压缩的文件类型。默认配置是:
默认不需要对图片、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>之前加入一下内容:
这里第一行表示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生成的缓存内容了。
基于内存的设置与基于硬盘的设置大体相似,但本人不建议使用内存缓存,比较系统的内存是比较宝贵的