Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1037439
  • 博文数量: 239
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 3618
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-12 13:17
文章分类

全部博文(239)

文章存档

2021年(1)

2016年(1)

2015年(30)

2014年(91)

2013年(116)

分类: LINUX

2013-06-14 10:17:26

IHS 简称IBM Http Server,是IBM的一款基于Apache的Web服务器。
安装好后,需要对其参数进行一些调优。

修改httpd.conf文件一下参数至推荐值:
 
ThreadLimit 25                    #每个子进程的最大线程数
ServerLimit 80                     #活动子进程数量
StartServers 2                    #启动apache时启动的httpd进程个数。
MaxClients 2000                  #最大并发连接数
MinSpareThreads 25            #服务器保持的最小空闲进程数
MaxSpareThreads 100          #服务器保持的最大空闲进程数
ThreadsPerChild 25              # 每个子进程的产生的线程数。
MaxRequestsPerChild 10000   #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为10000。

修改MaxKeepAliveRequests 对应的值由100改为50

修改KeepAliveTimeout 对应的值由10改为5 



MaxRequestsPerChild
每个子进程在其生存期内允许伺服的最大请求数量,默认为0.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2、在服务器负载下降的时侯会自动减少子进程数。
如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成10000或者更小。
上述的简单意思就是:如果内存够大MaxRequestsPerChild可以设置为0,如果不够大,则需要设置成推荐值,甚至更小。

ServerLimit 
默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。
生效前提:必须放在其他指令的前面
说明: 4G内存所能够使用的HTTP连接数尽量设置小于2000


StartServers
启动时建立的子进程数量,prefork默认为5


MinSpareServers
指定空闲子进程的最小数量,默认为5。
如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。


MaxSpareServers
设置空闲子进程的最大数量,默认为10。
如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。


MaxClients
限定同一时间客户端最大接入HTTP请求的数量(单个进程并发线程数),默认为256。
任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。


MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。
如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。

TCP持续连接:
KeepAlive 是否允许持续连接
MaxKeepAliveRequests 允许的持续连接的最大数
KeepAliveTimeout 持续连接在没有请求多少秒后切断
通常都是每个HTTP请求对应一个TCP连接,但对于一个包含许多图片的网页来说,客户端会在瞬间发出多个HTTP请求,此时多次建立TCP连接会大大降低响应速度。此时通过持续连接,可以允许用户在一个TCP连接中发出多个HTTP请求,减少TCP连接建立次数,提高响应速度。
这种情况下,应当通过access_log统计出连续HTTP请求出现的次数、间隔时间、访问量,以确定 MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用;太大了,持续连接迟迟不断,浪费TCP连接数不说,更糟糕的是系统中的 httpd 进程数目会因此不断增加,使得系统负载升高,甚至会导致服务器失去响应。
但是在处理动态网页请求时,由于用户很少会瞬间请求多个动态网页(一般都是打开页面之后阅读好半天才点下一页),此时打开KeepAlive无异于浪费TCP连接数。
结论就是,放动态网页的就 KeepAlive Off 以提高吞吐量,放静态内容如图片、js代码等就 KeepAlive On 以减少TCP连接建立次数。
如果你使用的使mpm_prefork模式(apache默认安装),那么建议你将KeepAlive设置为off;因为,开启keepalive会为每个客户端建立一个连接,prefork不会创建线程,估计100个用户同时访问你的网站,apache就会挂了~,如果你实在想开启,那么请将KeepAliveTimeOut 时间设置更短些,例如5.
prefork的配置项目:
StartServers 最初启动时启动多少个服务器进程
MinSpareServers 空闲服务器进程的最小数
MaxSpareServers 空闲服务器进程的最大数
MaxRequestsPerChild 每个子进程处理的最大请求数

阅读(3089) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~