Chinaunix首页 | 论坛 | 博客
  • 博客访问: 934464
  • 博文数量: 245
  • 博客积分: 11429
  • 博客等级: 上将
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-15 00:16
文章存档

2011年(56)

2010年(174)

2009年(15)

分类: LINUX

2010-08-31 16:26:39

今天公司要我在开几个博客,我从wordpress下载,创建数据库,设置apache虚拟主机,一切都顺利完成,但是让我唯一感到遗憾的是打开博客很慢,速度上不行,这是对网站主的一个致命的错误。
  我的系统是我自己虚拟出来的xen,
    内存2G 当没什么负载的时候,就省300m左右了
    这个是要解决的,只有修改xen的配置文件即可,但是我需要关闭虚拟机,可我不想关闭,麻烦,只能从web服务的优化考虑了。下面考虑apache的优化吧。
   1.硬件优化,不考虑了
   2.apache的优化
      a 考虑连接数,并发数,连接时间,这是几个主要的
          主要是编写 prefork.c 这个参数 根据自己的情况去定吧
         
           StartServers 10
           MinSpareServers 10
           MaxSpareServers 15
           ServerLimit 4000
           MaxClients 3000
           MaxRequestsPerChild 10000
        

     
        StartServers         2
        MaxClients         500
        MinSpareThreads     25
        MaxSpareThreads     75
        ThreadsPerChild     25
        MaxRequestsPerChild  10000
    

  3.一些参数的设定
      Timeout 60 #可适当的减小
      KeepAlive Off #取消长连接
      MaxKeepAliveRequests 50
      KeepAliveTimeout 5
      UseCanonicalName Off
      AccessFileName .htaccess
      ServerTokens Prod  #信息
      ServerSignature Off  # 显示主机信息
      HostnameLookups Off #主机名解析
4.让机器的图片之类的进行客户端缓存吧,
     /usr/local/111/bin/apxs -i -c /home/software/bak/httpd-2.2.3/modules/metadata/mod_expires.c
/usr/local/apache111/bin/apxs -i -c /home/software/bak/httpd-2.2.3/modules/metadata/mod_headers.c


vi /usr/local/apache111/bin/apr-1-config
改 LDFLAGS="" 为 LDFLAGS="-lz"
/usr/local/apache111/bin/apxs -i -c /home/software/bak/httpd-2.2.3/modules/filters/mod_deflate.c


httpd.conf配置:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule expires_module modules/mod_expires.so
   第一种:

ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A604800
ExpiresByType text/css A604800



SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript

第二种:


  ExpiresActive On
  #ExpiresDefault "access plus 1 day"
  ExpiresDefault A259200
 #ExpiresByType image/gif A2592000
 # ExpiresByType image/jpeg A2592000
 # ExpiresByType image/png A2592000
 # ExpiresByType image/x-icon A2592000
 # ExpiresByType application/x-javascript A604800
 # ExpiresByType text/css A604800



SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript



解释一下。ExpiresByType 是通过MIME类型来设置具体文件的缓存时间,A表示访问,A后面的数字表示访问后的缓存时间。AddOutputFilterByType表示根据后面 的MIME类型来压缩文件,这里对css,html,gif,jpeg,png,JavaScript等进行压缩。更多选项请参考手册哦。

关闭ETag。Etag的问题在于,它是根据可以辨别网站所在的的具有唯一性的属性来生成的。当浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时ETag就会不匹配,这种情况对于使用服务器组和处理请求的网站来说是非常常见的。在配置文件中写入下面一行即可:

FileETag none

如果是多服务器,可以设置为FileETag MTime Size,apache默认设置为FileETag INode MTime Size,去掉INode。

5.增加缓存模块
 编辑apache时加上 --enable-cache --enable-disk-cache --enable-mem-cache
  添加
 
#   CacheForceCompletion 100
  CacheDefaultExpire 3600
  CacheMaxExpire 86400
 CacheLastModifiedFactor 0.1
   CacheEnable disk /
   CacheRoot "/var/cache/mod_proxy"


mod_cache:
CacheEnable: 启动 mod_cache,其后接两个参数。第一个参数指定快取的种类,应设为 mem (记忆体快 取) 或 disk (磁碟快取) 之其一;第二个参数指定使用快取的 URI 路径,如果对整个网站 (或虚拟主机) 进行快取,简单指定为根目录 (/) 即可。
CacheForceCompletion: 这个值指定当 HTTP request 被取消时,内容的产生动作要完成的百分比;预设是 60(%)。
CacheDefaultExpire: 指定快取的预设过期秒数;预设值是一小时 (3600)。
CacheMaxExpire: 指定快取最大的过期秒数;预设值是一天 (86400)。
CacheLastModifiedFactor: 用来从回应里 Last Modified 资讯算出 expire date。
计算方式是:
expire period (过期时距) = 最后更新后至今的时间间距 * CacheLastModifiedFactor

expire date = 目前时间 + expire period
不过无论如何,过期时间不能超过 CacheMaxExpire 的设定值。

现在。如果用squid对该服务器进行反向代理的话,就可以通过cache 实现web的加速了
6.内容压缩
 

gzip功能能在消耗一点点CPU使用率的情况下,大幅减少网页在传输过程中的带宽(大约60%-75%)。最近一直在折腾ctusky网站打开速度的事情,所有关到打开速度的我总是非常关心,下面就来介绍一下apache2下开启gzip压缩的方法。

正确区分mod_deflate和mod_gzip

所谓gzip,其实在早期的apache 1.x系列版本中没有内建网页压缩技术,所以才需要去gzip压缩,apache2官方在开发的时候,就已经把网页压缩考虑进去,内建了 mod_deflate模块,所以apache2就不需要使用到mod_gzip了,这两者的工作原理是类似的,还有启用mod_deflate这个网页 压缩的模块,功能和效率和mod_gzip是差不多的,甚至还好一些,就不需要再用mod_gzip模块了。

开启apache2的gzip

编译安装APACHE2.2.XX: 编译源码时要加上 –enable-deflate=shared
在http.conf里会找到如下行; 如果没有请加上

LoadModule deflate_module modules/mod_deflate.so

如果是YUM RPM安装的话就自动开启了.压缩比例:约能压缩下70%的体积

更多定制

开启了压缩功能.可以很好的使用了,如果你还想更详尽的定制的话,请看下面:
可以在http.conf后面加上这一段进行定制:(如非必要,用默认的就好了)


DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE js css

这样可以压缩一般网页中会用到的html、xml、php、css、js等格式档案输出,虽然会占用掉服务器处理器的一点点处理器时间,浏览者在接收 网页数据时也会消耗极短暂的一点点处理器时间,不过却可以大幅减少数据传输量,减少网络带宽被吃掉的情形。
DeflateCompressionLevel 9是指压缩程度的等级,从1到9,9是最高等级。据了解,这样做最高可以减少8成大小的传输量(看档案内容而定),最少也能够节省一半。
DeflateCompressionLevel 预设可以采用 6 这个数值,以维持耗用处理器效能与网页压缩质量的平衡。

补充

至于已经是压缩过的图片格式如jpg,音乐档案如mp3、压缩文件如zip之类的,就没必要再压缩了,因为这种档案你一开放服务器传输时压缩,处理器时间 会跑不完,而且就算你跑完,大小也一样,如果使用PHP函数之类压缩过的文件,httpd服务是不会再次压缩的,系统级别的处理,总会比应用级别的效率高 吧。

Apache 的 mod_deflate 和 gzip compression 的对比.
 
* 不使用任何压缩: 430KB
* 仅使用 gzip: 323KB
* 仅使用 Apache 的 deflate 模块: 247KB
* 同时使用 deflate 以及 gzip: 247KB
 
至於时间的部份, 差异倒不是很大, 大约都是在 10-20 秒左右。
6.设置内核 增加并发量
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =  32768
net.core.somaxconn = 32768

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800

#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024  65535

这样下来的博客速度提升了30% 这是我感觉。具体多少不清楚了。
参考:
   
阅读(1211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~