Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509717
  • 博文数量: 143
  • 博客积分: 4072
  • 博客等级: 上校
  • 技术积分: 1442
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-20 19:27
文章分类

全部博文(143)

文章存档

2014年(2)

2011年(4)

2010年(1)

2009年(9)

2008年(34)

2007年(93)

我的朋友

分类: 系统运维

2007-02-21 12:19:25

 

    没有APACHE做深入研究,只是每次需要的时候会收罗一下。下面是平日的累积结果
一、方案:一个客户提供了访问及流量,要求我们给个硬件的配置。
LINUX+APACHE+MYSQL+PHP(LAMP)
APACHE2.0, 完全以默认方式安装(MPM=prefork派生子进程)
APACHE主要配置参数:
StartServers       :开始进程数
MinSpareServers    :最小空闲进程 
MaxSpareServers    :最大空闲进程  
MaxClients         :最高并发进程数,默认256个  
MaxRequestsPerChild:每个进程的可以处理的请求数 (请求时间由带宽及页面大小决定) 最好予以限制,以防内存溢出

条件:
以163.com为例: 平均页面大小96K,客户下载速度为86K/s
则每个页面响应时间为 96/86 S,一天能承受的访问量是 256*3600*24*86/96=19,814,400
默认情况就可以应对百万级的这样大小的日访问量
 
网卡: 96K*256*8/1024 =192
刚需要KM网卡
 
二、APACHE的优化配置
Apache优化

==模块设置
动态:
     载入模块非常方便,但它将导致性能下降,因为在需要时模块才会被载入(这将会耗时)。不过动态模块也有利于减少服务器对内存的需求。(即不需要一直将module loaded)
静态安装:
     需要注意不要将不必要的模块加载,会导致内存占用过多。
为了装Apache安装成静态模式,使用设置脚本定义你需要的模块,但是不要将它们定义为共享的(例如:使用--enable-rewrite而不要用--enable-rewrite=shared,也不要用共享
选项--enable-so)。
  
==服务器配置设置
1/简化设置文件:删除注释部分,减少出错
可以删除对当前平台上用不到的多处理机方式(MPM)的引用
相关配置模块
1)禁用模块
  现在,我们已经得到了一个清爽的设置文件,下面我们可以开始删除其中我们系统用不到的元素,特别是:
  ●HostnameLookups(主机名查找),这增加了处理每个请求的开销,首先,服务器会对DNS系统做一个反向查询以找出客户系统的主机名,然后又进行正向查询看获得的主机
名是否真实指向客户的IP。大多数情况下,你可以简单的关闭这个功能,如果你经常处理服务器日志,这个工作完全可以在以后进行。你可以通过在设置文件中加入指示
HostnameLookups off来关闭这个功能。
  ●符号连接。当打开这个选项时,Apache将检查每个请求中是否包含对符号连接的引用,这将对请求中包含的每个路径调用一次lstat()系统调用。除非你准备使用符号连接,
否则用 Options -FollowSymLinks 来关掉它。
  ●服务器状态信息。尽管这对测试与监控服务器很有用,但它也为服务器带来了额外的开销,你可以通过寻找任何类似SetHandler server-status的指示来关闭,如果可能,
你可以在安装Apache时移除这个模块。
  ●在可以更精确的时候尽可能不要使用通配符之类的灵活选项,例如,对于DirectoryIndex指示,明确的指定设置文件列表,最常用的放在最前。
  ●除非你有很好的理由否则就允许CGI的执行,将似有的CGI文件放到一个特定的目录并为之设定正确的权限,这避免了Apache对每一个请求都要判断一次要求的是一个静态文
件还是一个动态文件
2)禁用日志
  写入日志信息是一个很花费时间的工作,尽管Apache保持日志文件的打开状态以节省打开文件的时间,但仍然得花费不少的时间。如果没有必要存储日志信息,你可以关闭这
个选项以节省出更多的处理器时间,只需要在设置文件中把日志那一行注释掉就可以关掉它。
  如果必须保留日志,你可以关闭HostnameLookups选项(见上文)然后把日志文件拷备到另一台机器上做进一步分析。
3)简化目录级的设置
 简言之:可以将htaccess禁用,即将设置为AllowOverride None。
  htaccess文件可以极大的扩展Apache的设置参数,而无需每次你改变设计都要编辑Apache主设置文件,但对这个文件的使用也降低了服务器的性能。
  1>如果使用这个文件,Apache必需首先在当前目录中查找是否存在这个文件,如果存在就解析这个文件并在当前目录中应用文件中的设置。2>更坏的是,Apache不仅要查看当
前的目录,还要查看当前目录的所有上层目录是否包括htaccess文件以根据所有这些文件最终确定设置。
  如果你想最优化服务器的性能,你应该禁止使用htaccess文件,任何基本目录的设置都可以在主设置文件中进行,而主设置文件仅在服务器启动时解析一次。
  为了禁用htaccess文件,在任何节里加上指示AllowOverride None。
4)多处理方式设置
在UNIX下则有两个选项:prefork(进程数)||worker(线程数),对于CPU少的情况,Prefork更好
 MaxClients指示是最有效的提高服务器性能的方法,它控制了Apache可以处理的最大并发连接数。

==优化静态内容
  编译安装时可以考虑参数:mod_cache,包括mod_disk_cache基于磁盘的缓存与mod_mem_cache基于内存的缓存

==优化动态内容
可以考虑把解析过的脚本缓存起来,这样下一次遇到同样的请求就可以直接执行而无需再次解析。
 
***************
关于MPM的work.c  与 prefork两种工作模式。
1/prefork 单独的子进程来处理不同的请求,多开启进程StartServers->按照每秒生成2的(n-1)次方递加(但至多32进程/PS),直到MinSpareServers个空闲情况下。
StartServers         5
MinSpareServers      5
MaxSpareServers     10
MaxClients         50
MaxRequestsPerChild  0
修改server/mpm/prefork/prefork.c MAX_SERVER_LIMIT
**
关于apache2.0(prefork)里增加"MaxClient"的声明
需要把ServerLimit放到最前面,如下就行了 
 
[color=darkred:31bf492ae6]ServerLimit     2000[/color:31bf492ae6] 
StartServers         10 
MinSpareServers     10 
MaxSpareServers     15 
MaxClients         1500 
MaxRequestsPerChild 10000 
 
**
关键词解释
Maxclient:最多的"连接数"(同时可以得到处理的客户端的最大数量)(限制响应连接数)ps auxwww|grep http|wc 所看到的是连接数
ThreadsPerChild:ThreadsPerChild每个子进程允许建立的线程数的
ServerLimit:进程建立的最大数量
   ServerLimit乘以ThreadsPerChild必须大于等于MaxClients
MaxRequestsPerChild 指令用于控制服务器建立和结束进程的频率 /MaxRequestsPerChild设置的是每个子进程可处理的请求数

如果你想用php的话,就不要用worker方式的mpm了,因为php到现在还没有保证所有的代码都是线程安全的
如果你真的这么有兴趣试验Apache2+worker+php,可以考虑fastcgi方式的php, 具体可以参考fastcgi.coremail.cn
考虑因素:每个页面请求需要的时间 页面内容大小*Band
阅读(1491) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~