- 浏览: 326638 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
ljl961890233bear:
...
利用MySQL Cluster 7.0 + LVS 搭建高可用环境 -
wang1352083:
$m->listDBs(); 返回的是一个有dbnam ...
MongoDB PHP API 及用法 -
走忽闪953:
...
putty PasswordAuthentication -
jxhgzs001:
很好 很强大,不顶你一下 觉得过意不去啊
cocos2d 的一些实用代码 -
lingtianlan:
我实际测试的结果却和你不一样,调用顺序是awakeFromNi ...
[转]loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法
apache2.2 prefork模式优化
apache2.2优化配置核心关键:
(一)prefork模式下(其他模式下不适用),apache需要优化的主要参数:
ServerLimit 3000
StartServers 750
MinSpareServers 5
MaxSpareServers 100
MaxClients 3000
MaxRequestsPerChild 10000
首先来看看apache各个参数的意义(引号里引用的是官方文档的描述):
(1)ServerLimit和MaxClients 服务器最大同时响应请求数
这个就是你当前配置的apache最大的并发响应数,对应的是apache的进程数,两个参数同时修改,MaxClients不得大于ServerLimit参数。
ServerLimit的大小,取决于你系统的资源,每个apache进程默认占用2M内存,基本可以按照这个公式来计算:最大内存*80%/2M=ServerLimit
(2)StartServers 750 启动时默认启动的进程数
这个参数默认是5,因为apache会通过自动启动新进程来增加响应服务的进程数,这个值不做调整的也是可以的,会由默认的5增加到满足服务的进程数,但是会出现开始启动时的卡住。
小启动参数有一个好处:就是可以让传递后后端tomcat的压力缓慢增加上来,而不是一下子增加压力。可以把这个调整到当前服务最大的并发数,当前服务最大并发连接数,可以通过监控apache进程个数:ps -ef | grep httpd | wc -l 来获得。不用调得太大,否则是无谓增加apache通过jk去跟tomcat建立的连接。
注意:apache进程跟tomcat建立连接后,不会释放此连接,会一直保持连接,直到timeout,如果没有timeout时间,就会永久连接。timeout的设置,会在后面jk配置里说明。
所以不要一次启动太多的apache进程,只启动足够用的进程即可。其他增加的流量,apache会自动调整进程数,直到MaxClients参数限定的范围。
(3)MinSpareServers 5 最小空闲进程
MinSpareServers指令设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以第一秒一个,第二秒两个,第三秒四个,按指数递增个数的速度产生新的子进程。
(4)MaxSpareServers 10 最大空闲进程
MaxSpareServers指令设置空闲子进程的最大数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。
可以调整这两个参数,但是这两个参数的值不能设得太大,否则apache进程太多,会导致对应开启的tomcat进程也会很多。
官网上关于这两个参数都有这么句话:“将此参数设的太大通常是一个坏主意。”
在一台压力大(并发访问2800)的服务器上,MaxSpareServers这个值设置的是200。
设置了这个值的好处是不会有太多的空闲的进程在消耗资源,同时减少apache和tomcat的连接端口。
关闭空闲apache进程的同时,会释放jk连接,同时释放tomcat连接数,进而减少系统资源消耗。
(5)MaxRequestsPerChild 10000
"MaxRequestsPerChild指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
将MaxRequestsPerChild设置成非零值有两个好处:
* 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
* 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意
对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。"
也就是说实际上这个时候子进程最大连接数等于MaxRequestsPerChild*MaxKeepAliveRequests
所以在开启KeepAlive后,需要同时设置MaxRequestsPerChild和MaxRequestsPerChild,确保每个apache进程在服务一定请求数后会关闭,重新开启新的子进程,避免apache进程异常导致的内存泄露和资源占用。
(6)Keep-Alive
默认:ON
发送的请求,在MaxRequestsPerChild里面只算一个,不管这个连接发送了多少个请求。
(7)MaxKeepAliveRequests
默认:100
"一个建立好的Keep-Alive连接,允许发送的请求的个数。一旦建立连接,要么就是个数达到了断开,要么就是等KeepAliveTimeout时间到了断开连接。
MaxKeepAliveRequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。"
这个数字的设置,必须考虑在一个时间段内,同一个用户访问你的服务会发多少请求。要结合KeepAliveTimeout参数来考虑。
举个例子,用户需要间隔时间不大于KeepAliveTimeout的时间内,连续请求10个文件,那么这个参数就应该设置成10,如果用户在连续时间里不断请求访问,则这个数值得设置得更多。否则就重新建立连接下载。一旦用户连续进行了10个请求后,并且这个用户肯定在完成这些请求后的5秒内不会再请求,甚至要在之后的很长时间后请求,那么这个KeepAliveTimeout时间就可以设置得很短,以便尽早断开这种用户,把资源让个其他用户。
(8)KeepAliveTimeout
默认:5
"在一个建立好的Keep-Alive连接上,在MaxKeepAliveRequests个数未满的情况下,等待下一个请求的时间。"
如果有请求到达,那么apache等待IO响应的timeout时间时间开始生效,timeout时间没等到响应,连接被断开;如果KeepAliveTimeout时间内,没有请求到达,连接就被断开。
具体设置可以参考配合MaxKeepAliveRequests参数。同时这个参数又受TimeOut参数影响,在一次成功连接中,TimeOut时间内没有等到响应,也会断开连接。
(9)TimeOut
默认:300
"TimeOut指令用于设置Apache等待以下三种事件的时间长度:
1. 接受一个GET请求耗费的总时间。
2. POST或PUT请求时,接受两个TCP包之间的时间。
3. 应答时TCP包传输中两个ACK包之间的时间。
我们计划在发展里程中,逐步把它们分别变得更易配置。计时器在1.2版本之前的默认值为1200,而现在已经设置为300了,但对于绝大多数情况来说仍是足够的。没有把它默认值设的更小的原因在于代码里还有点问题:有时发送一个包之后,计时器没有复位。”
影响Apache的性能配置参数:
影响Apache的性能配置参数:
Timeout 300
指定站点响应的时间秒数。若超过这段时间仍未收到或送出数据,就断开连接。意思是该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30。
KeepAlive On|Off
启用此项,表示允许保持持久连接,让每次连接能提出多个请求。避免每请求一个文件就跟服务器建立一次连接。也就是控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。
MaxKeepAliveRequests 100
每次连接可提出请求的数量,设置为0表示数量不限,默认值为100。.
KeepAliveTimeout 15
连续两个请求之间的时间如果超过15秒还未到达,则视为连接中断。这种做法可以最大限度地利用有限的资源,这也是Apache性能如此优越的原因之一。
MinSpareServers 5
MaxSpareServers 20
Apache在运行时会根据负载的轻重自动调整空闲子进程的数目。
提供浏览服务的httpd进程的数目需要随连接数目的多少而变化,因此需要随时保持几个闲置的httpd进程等候新的连接请求。若闲置的进程数少于5个(默认值),则表示闲置进程太少,需要将其增加到5个;
若多于20个(默认值)则表示闲置进程太多,需将其减少到20个。
MaxClients 150
同时接入的数目太多时会降低系统访问性能,设置此参数可限制同时连接的最大数值,默认值为150,它设定的就是Apache可以同时处理的请求,这是对Apache性能影响最大的参数
MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一时间内最多允许有多少客户端能够与其连接,如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。我们看到默认情况下MaxClients设置为15,这对一些中型站点和大型站点显然是远远不够的!也许您需要同时允许512个客户端连接才能满足应用需求,好吧,那么就让我们把MaxClients修改为512,保存httpd.conf并退出,重启Apache,很遗憾,在重启过程当中您看到了一些错误提示,Apache重启失败。错误提示中告诉您 MaxClients最大只能设定为256,相信您一定很失望。不过不要沮丧,Apache作为世界一流的Web Server一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于 ServerLimit的设定数值的!下面让我们了解一下MaxRequestPerChild参数,该参数指定一个连接进程中可以有多少个线程同时工作。也许这样解释过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认设置为0,即为:不限制。但需要注意,如果将该值设置的过小会引起访问问题,如果没有特殊需要或者访问量压力并非很大可以保持默认值,如果访问量很大则推荐设置为2048
优化建议:
# 升级 Apache 到最新版本,新版本往往包含性能提升和安全更新。
# 在 httpd.conf 中设置 "HostNameLookups off" 能避免针对每个访问者的 DNS 域名的反向查询。
# 对于繁忙的网站,在 httpd.conf 中设置 "MaxClients 230" 或者更高。这项设置让更多的 httpd 进程同时响应请求,并避免了处理器排队的情况发生。
# 采用另外一台服务器处理图片文件。
# 缺保您的 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的文章可以参考本站:采用 mod_gzip 加速 Zope 和 Apache
# 保持您的 Apache 苗条,编译那些仅仅需要的模块,在编译之前,修改 src/Configuration 文件,在那些不需要的模块之前用 # 号注释掉。
# 如果不需要流量日志,那么把 httpd.conf 中的 TransferLog 指向到 /dev/null/
# 除非你确定使用 .htaccess 文件来控制一些目录的权限,否则设置 "AllowOverride None" ,这样就免去 Apache 在每个目录搜索 .htaccess 文件的劳役之苦。
# 不要让不需要的后台进程运行。
# 千万不要把页面或者日志文件写到网络磁盘上,例如 NFS。
# 不要让 Apache (httpd) 运行于 inetd 模式。
# 不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。
# 避免使用 SSI tag。
# 在 CGI 脚本中:
* 文件 I/O:打开的文件数目越少越好。
* Shell 命令:采用全路径来调用 shell 命令。
* 如果你的网站主要以 CGI 来驱动,那么请使用 mod_perl。
* 在你的 Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。
# 在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。
# 对你的网站做压力测试,建议采用 Apache 自带的 ab 命令来测试。
# 为了最好的性能,最好把网线拔掉,这样你的 Web 服务器就十分安全,而且负载马上降为 0,
Apache的最大连接数,默认为256个。
修改apache的最大连接数,方法如下:
步骤一:先修改./apache/conf/httpd.conf文件。
# vi httpd.conf
将“#Include conf/extra/httpd-mpm.conf”前面的 # 去掉。
保存。
步骤二:再修改./apache/conf/extra/httpd-mpm.conf文件。
# vi httpd-mpm.conf
找到 <IfModule mpm_prefork_module> 这一行
原:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
修改后
<IfModule mpm_prefork_module>
Apache的最大连接数,默认为256个。
修改apache的最大连接数,方法如下:
步骤一:先修改./apache/conf/httpd.conf文件。
# vi httpd.conf
将“#Include conf/extra/httpd-mpm.conf”前面的 # 去掉。
保存。
步骤二:再修改./apache/conf/extra/httpd-mpm.conf文件。
# vi httpd-mpm.conf
找到<IfModule mpm_prefork_module> 这一行
原:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
修改后
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1500
MaxClients 1000
MaxRequestsPerChild 0
注意:1、一定要加ServerLimit,并且要在MaxClients前面,且数值要比MaxClient的值大;
2、重启apache,仅仅/bin/apachectl restart无效,
需要先apachectl stop 然后再apachectl start
对apache中并发控制参数prefork理解和调优
一个apache有linux下的并发不是很高的,大约到3K的样子,普通的服务器都会不同程度的出现问题.apache有关并发控制主要是 prefork和worker二个其中一个来控制.我们可以使用httpd -l来确定当前使用的MPM是prefork.c,还是Worker.c.下面是apache中有关prefork的配置.下面是我优化过的参数.
<IfModule prefork.c>
#有这个参数就不必像apache1一样修改源码才能修改256客户数的限制,听讲要放到最前面才会生效,2000是这个参数的最大值
ServerLimit 2000
#指定服务器启动时建立的子进程数量,prefork默认为5。
StartServers 25
#指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
MinSpareServers 25
#设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此 参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改 成”MinSpareServers+1”。
MaxSpareServers 50
#限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit 。
MaxClients 2000
#每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0”,子进程将永远不会结束。
MaxRequestsPerChild 10000
</IfModule>
将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
工作方式:
一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的 (spare)或者是空闲的子进程用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。在Unix系统中,父进程通常以root身 份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。User和Group指令用于设置子进程的低特权用户。运行子进程的用户必须要对它所服务的内容有 读取的权限,但是对服务内容之外的其他资源必须拥有尽可能少的权限。
我们调优常常要查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):
#ps -ef | grep httpd | wc -l
出现的结果,就是当前Apache能够处理的多少个并发请求,这个值Apache根据负载情况自动调.
查看Apache的并发请求数及其TCP连接状态:
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放 处理完毕,等待超时结束
LAST_ACK:等待所有分组死掉
优化示例配置:
<IfModule mpm_prefork_module>
ServerLimit 20000
StartServers 10
MinSpareServers 10
MaxSpareServers 20
ServerLimit 2000
MaxClients 1000
MaxRequestsPerChild 10000
</IfModule>
<IfModule mpm_worker_module>
StartServers 3
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>
apache2.2优化配置核心关键:
(一)prefork模式下(其他模式下不适用),apache需要优化的主要参数:
ServerLimit 3000
StartServers 750
MinSpareServers 5
MaxSpareServers 100
MaxClients 3000
MaxRequestsPerChild 10000
首先来看看apache各个参数的意义(引号里引用的是官方文档的描述):
(1)ServerLimit和MaxClients 服务器最大同时响应请求数
这个就是你当前配置的apache最大的并发响应数,对应的是apache的进程数,两个参数同时修改,MaxClients不得大于ServerLimit参数。
ServerLimit的大小,取决于你系统的资源,每个apache进程默认占用2M内存,基本可以按照这个公式来计算:最大内存*80%/2M=ServerLimit
(2)StartServers 750 启动时默认启动的进程数
这个参数默认是5,因为apache会通过自动启动新进程来增加响应服务的进程数,这个值不做调整的也是可以的,会由默认的5增加到满足服务的进程数,但是会出现开始启动时的卡住。
小启动参数有一个好处:就是可以让传递后后端tomcat的压力缓慢增加上来,而不是一下子增加压力。可以把这个调整到当前服务最大的并发数,当前服务最大并发连接数,可以通过监控apache进程个数:ps -ef | grep httpd | wc -l 来获得。不用调得太大,否则是无谓增加apache通过jk去跟tomcat建立的连接。
注意:apache进程跟tomcat建立连接后,不会释放此连接,会一直保持连接,直到timeout,如果没有timeout时间,就会永久连接。timeout的设置,会在后面jk配置里说明。
所以不要一次启动太多的apache进程,只启动足够用的进程即可。其他增加的流量,apache会自动调整进程数,直到MaxClients参数限定的范围。
(3)MinSpareServers 5 最小空闲进程
MinSpareServers指令设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以第一秒一个,第二秒两个,第三秒四个,按指数递增个数的速度产生新的子进程。
(4)MaxSpareServers 10 最大空闲进程
MaxSpareServers指令设置空闲子进程的最大数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。
可以调整这两个参数,但是这两个参数的值不能设得太大,否则apache进程太多,会导致对应开启的tomcat进程也会很多。
官网上关于这两个参数都有这么句话:“将此参数设的太大通常是一个坏主意。”
在一台压力大(并发访问2800)的服务器上,MaxSpareServers这个值设置的是200。
设置了这个值的好处是不会有太多的空闲的进程在消耗资源,同时减少apache和tomcat的连接端口。
关闭空闲apache进程的同时,会释放jk连接,同时释放tomcat连接数,进而减少系统资源消耗。
(5)MaxRequestsPerChild 10000
"MaxRequestsPerChild指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
将MaxRequestsPerChild设置成非零值有两个好处:
* 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
* 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意
对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。"
也就是说实际上这个时候子进程最大连接数等于MaxRequestsPerChild*MaxKeepAliveRequests
所以在开启KeepAlive后,需要同时设置MaxRequestsPerChild和MaxRequestsPerChild,确保每个apache进程在服务一定请求数后会关闭,重新开启新的子进程,避免apache进程异常导致的内存泄露和资源占用。
(6)Keep-Alive
默认:ON
发送的请求,在MaxRequestsPerChild里面只算一个,不管这个连接发送了多少个请求。
(7)MaxKeepAliveRequests
默认:100
"一个建立好的Keep-Alive连接,允许发送的请求的个数。一旦建立连接,要么就是个数达到了断开,要么就是等KeepAliveTimeout时间到了断开连接。
MaxKeepAliveRequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。"
这个数字的设置,必须考虑在一个时间段内,同一个用户访问你的服务会发多少请求。要结合KeepAliveTimeout参数来考虑。
举个例子,用户需要间隔时间不大于KeepAliveTimeout的时间内,连续请求10个文件,那么这个参数就应该设置成10,如果用户在连续时间里不断请求访问,则这个数值得设置得更多。否则就重新建立连接下载。一旦用户连续进行了10个请求后,并且这个用户肯定在完成这些请求后的5秒内不会再请求,甚至要在之后的很长时间后请求,那么这个KeepAliveTimeout时间就可以设置得很短,以便尽早断开这种用户,把资源让个其他用户。
(8)KeepAliveTimeout
默认:5
"在一个建立好的Keep-Alive连接上,在MaxKeepAliveRequests个数未满的情况下,等待下一个请求的时间。"
如果有请求到达,那么apache等待IO响应的timeout时间时间开始生效,timeout时间没等到响应,连接被断开;如果KeepAliveTimeout时间内,没有请求到达,连接就被断开。
具体设置可以参考配合MaxKeepAliveRequests参数。同时这个参数又受TimeOut参数影响,在一次成功连接中,TimeOut时间内没有等到响应,也会断开连接。
(9)TimeOut
默认:300
"TimeOut指令用于设置Apache等待以下三种事件的时间长度:
1. 接受一个GET请求耗费的总时间。
2. POST或PUT请求时,接受两个TCP包之间的时间。
3. 应答时TCP包传输中两个ACK包之间的时间。
我们计划在发展里程中,逐步把它们分别变得更易配置。计时器在1.2版本之前的默认值为1200,而现在已经设置为300了,但对于绝大多数情况来说仍是足够的。没有把它默认值设的更小的原因在于代码里还有点问题:有时发送一个包之后,计时器没有复位。”
影响Apache的性能配置参数:
影响Apache的性能配置参数:
Timeout 300
指定站点响应的时间秒数。若超过这段时间仍未收到或送出数据,就断开连接。意思是该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30。
KeepAlive On|Off
启用此项,表示允许保持持久连接,让每次连接能提出多个请求。避免每请求一个文件就跟服务器建立一次连接。也就是控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。
MaxKeepAliveRequests 100
每次连接可提出请求的数量,设置为0表示数量不限,默认值为100。.
KeepAliveTimeout 15
连续两个请求之间的时间如果超过15秒还未到达,则视为连接中断。这种做法可以最大限度地利用有限的资源,这也是Apache性能如此优越的原因之一。
MinSpareServers 5
MaxSpareServers 20
Apache在运行时会根据负载的轻重自动调整空闲子进程的数目。
提供浏览服务的httpd进程的数目需要随连接数目的多少而变化,因此需要随时保持几个闲置的httpd进程等候新的连接请求。若闲置的进程数少于5个(默认值),则表示闲置进程太少,需要将其增加到5个;
若多于20个(默认值)则表示闲置进程太多,需将其减少到20个。
MaxClients 150
同时接入的数目太多时会降低系统访问性能,设置此参数可限制同时连接的最大数值,默认值为150,它设定的就是Apache可以同时处理的请求,这是对Apache性能影响最大的参数
MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一时间内最多允许有多少客户端能够与其连接,如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。我们看到默认情况下MaxClients设置为15,这对一些中型站点和大型站点显然是远远不够的!也许您需要同时允许512个客户端连接才能满足应用需求,好吧,那么就让我们把MaxClients修改为512,保存httpd.conf并退出,重启Apache,很遗憾,在重启过程当中您看到了一些错误提示,Apache重启失败。错误提示中告诉您 MaxClients最大只能设定为256,相信您一定很失望。不过不要沮丧,Apache作为世界一流的Web Server一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于 ServerLimit的设定数值的!下面让我们了解一下MaxRequestPerChild参数,该参数指定一个连接进程中可以有多少个线程同时工作。也许这样解释过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认设置为0,即为:不限制。但需要注意,如果将该值设置的过小会引起访问问题,如果没有特殊需要或者访问量压力并非很大可以保持默认值,如果访问量很大则推荐设置为2048
优化建议:
# 升级 Apache 到最新版本,新版本往往包含性能提升和安全更新。
# 在 httpd.conf 中设置 "HostNameLookups off" 能避免针对每个访问者的 DNS 域名的反向查询。
# 对于繁忙的网站,在 httpd.conf 中设置 "MaxClients 230" 或者更高。这项设置让更多的 httpd 进程同时响应请求,并避免了处理器排队的情况发生。
# 采用另外一台服务器处理图片文件。
# 缺保您的 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的文章可以参考本站:采用 mod_gzip 加速 Zope 和 Apache
# 保持您的 Apache 苗条,编译那些仅仅需要的模块,在编译之前,修改 src/Configuration 文件,在那些不需要的模块之前用 # 号注释掉。
# 如果不需要流量日志,那么把 httpd.conf 中的 TransferLog 指向到 /dev/null/
# 除非你确定使用 .htaccess 文件来控制一些目录的权限,否则设置 "AllowOverride None" ,这样就免去 Apache 在每个目录搜索 .htaccess 文件的劳役之苦。
# 不要让不需要的后台进程运行。
# 千万不要把页面或者日志文件写到网络磁盘上,例如 NFS。
# 不要让 Apache (httpd) 运行于 inetd 模式。
# 不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。
# 避免使用 SSI tag。
# 在 CGI 脚本中:
* 文件 I/O:打开的文件数目越少越好。
* Shell 命令:采用全路径来调用 shell 命令。
* 如果你的网站主要以 CGI 来驱动,那么请使用 mod_perl。
* 在你的 Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。
# 在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。
# 对你的网站做压力测试,建议采用 Apache 自带的 ab 命令来测试。
# 为了最好的性能,最好把网线拔掉,这样你的 Web 服务器就十分安全,而且负载马上降为 0,
Apache的最大连接数,默认为256个。
修改apache的最大连接数,方法如下:
步骤一:先修改./apache/conf/httpd.conf文件。
# vi httpd.conf
将“#Include conf/extra/httpd-mpm.conf”前面的 # 去掉。
保存。
步骤二:再修改./apache/conf/extra/httpd-mpm.conf文件。
# vi httpd-mpm.conf
找到 <IfModule mpm_prefork_module> 这一行
原:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
修改后
<IfModule mpm_prefork_module>
Apache的最大连接数,默认为256个。
修改apache的最大连接数,方法如下:
步骤一:先修改./apache/conf/httpd.conf文件。
# vi httpd.conf
将“#Include conf/extra/httpd-mpm.conf”前面的 # 去掉。
保存。
步骤二:再修改./apache/conf/extra/httpd-mpm.conf文件。
# vi httpd-mpm.conf
找到<IfModule mpm_prefork_module> 这一行
原:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
修改后
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1500
MaxClients 1000
MaxRequestsPerChild 0
注意:1、一定要加ServerLimit,并且要在MaxClients前面,且数值要比MaxClient的值大;
2、重启apache,仅仅/bin/apachectl restart无效,
需要先apachectl stop 然后再apachectl start
对apache中并发控制参数prefork理解和调优
一个apache有linux下的并发不是很高的,大约到3K的样子,普通的服务器都会不同程度的出现问题.apache有关并发控制主要是 prefork和worker二个其中一个来控制.我们可以使用httpd -l来确定当前使用的MPM是prefork.c,还是Worker.c.下面是apache中有关prefork的配置.下面是我优化过的参数.
<IfModule prefork.c>
#有这个参数就不必像apache1一样修改源码才能修改256客户数的限制,听讲要放到最前面才会生效,2000是这个参数的最大值
ServerLimit 2000
#指定服务器启动时建立的子进程数量,prefork默认为5。
StartServers 25
#指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
MinSpareServers 25
#设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此 参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改 成”MinSpareServers+1”。
MaxSpareServers 50
#限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit 。
MaxClients 2000
#每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0”,子进程将永远不会结束。
MaxRequestsPerChild 10000
</IfModule>
将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
工作方式:
一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的 (spare)或者是空闲的子进程用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。在Unix系统中,父进程通常以root身 份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。User和Group指令用于设置子进程的低特权用户。运行子进程的用户必须要对它所服务的内容有 读取的权限,但是对服务内容之外的其他资源必须拥有尽可能少的权限。
我们调优常常要查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):
#ps -ef | grep httpd | wc -l
出现的结果,就是当前Apache能够处理的多少个并发请求,这个值Apache根据负载情况自动调.
查看Apache的并发请求数及其TCP连接状态:
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放 处理完毕,等待超时结束
LAST_ACK:等待所有分组死掉
优化示例配置:
<IfModule mpm_prefork_module>
ServerLimit 20000
StartServers 10
MinSpareServers 10
MaxSpareServers 20
ServerLimit 2000
MaxClients 1000
MaxRequestsPerChild 10000
</IfModule>
<IfModule mpm_worker_module>
StartServers 3
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>
发表评论
-
查看Apache并发请求数及其TCP连接状态
2013-03-06 23:54 900这两天搭建了一组Apache服务器,每台服务器4G内存,采用的 ... -
搬服务器全过程
2013-03-06 23:32 14401.从A服务器打包 tar -zcvf /usr/back ... -
iptables常用
2013-03-01 01:07 5513#!/bin/sh # modprobe ipt_MASQ ... -
linux查看系统的操作日志
2013-02-28 10:44 35111.last -a 把从何处登入系统的主机名称或IP ... -
iptables规则的删除
2013-02-26 11:04 2523iptables -L INPUT --line-number ... -
linux下alias命令详解
2013-01-15 16:06 1228笔者在看《鸟哥私房菜》时,突然看到这个命令,之前未接触过,故简 ... -
简单远程服务器监控重启方案
2012-06-28 11:03 2693转至:http://blog.csdn.net/hfahe/a ... -
简单远程服务器监控重启方案
2012-06-28 10:59 0转至:http://blog.csdn.net/hfahe/a ... -
sed当中使用变量替换以及执行外部命令
2012-06-13 09:57 7722在使用sed对日志或者其它文本进行parse的过程当中,有时候 ... -
MySQL my.cnf参数配置优化详解
2012-03-21 07:32 37280[b]PS:本配置文件针对 ... -
linux fstab文件
2012-03-14 00:23 756df -lh cat /etc/fstab ... -
centos的mysql的密码修改方法
2011-08-03 14:15 2137以半年没有去自己的服务器上,居然把mysql的密码给忘了! 白 ... -
Apache 中 Keep Alive 配置的合理使用
2011-08-02 16:43 3748在 Apache 服务器中,KeepA ... -
linux top 详解
2011-07-18 10:45 955top命令是Linux下常用的 ... -
服务器 故障的一些 例子
2010-12-03 15:03 9281:服务器负载很小的情况下 ,httpd 的请求 很多: ... -
linux 一些命令集
2010-08-27 18:17 1157因每个访问者都会在服务器上打开一个进程作提供服务 查看进程数量 ... -
Nagios飞信linux系统免费短信报警配置
2010-08-20 09:24 3126Nagios飞信linux系统免费短信报警配置 本人声明如需 ... -
现在公司该用centos,尽量最基本的配置
2010-08-19 17:06 1224一、网络设置 [root@linux ~]# cat -n / ... -
centos/linux负载过高自动重启apache的脚本
2010-08-16 10:33 3192抽时间找了一个centos/linux负载过高自动重启apac ... -
Linux 流量分析的指令
2010-07-27 14:32 1229在高流量的 Linux server 下分析流量十分有用,以下 ...
相关推荐
### Apache2.2安全配置和性能优化 #### 安全配置 **Apache禁止目录遍历:** 为了确保Apache服务器的安全性,防止恶意用户通过遍历目录来获取未授权的文件或者敏感信息,需要对Apache进行相应的配置。在Apache中,...
4. **性能优化**:Apache 2.2提供了多种性能优化策略,如MPM(多进程模块)的选择,预读取(Prefork)、线程化(Worker)或者事件驱动(Event)模式,以及缓存机制和GZIP压缩等。 5. **错误处理与调试**:手册会...
2. **线程支持**:Apache 2.2支持多线程模型(MPM,Multi-Processing Modules),如`prefork`和`worker` MPM,其中`worker`模式是线程化的,适用于高并发场景。 3. **安全性增强**:增加了安全相关的功能,比如支持...
Prefork模式适用于内存充足的环境,每个进程只有一个线程;Worker模式则支持多线程,适合高并发场景。还可以通过调整MaxKeepAliveRequests、KeepAliveTimeout等参数优化连接处理。 七、CGI和FastCGI Apache支持执行...
2. **多线程与多进程模型**:Apache支持两种主要的工作模式:预生成子进程模型(Prefork)和多线程工作进程模型(Worker)。预生成子进程模型适合内存资源充足但CPU资源有限的环境,而多线程工作进程模型则更适合...
Apache 2.2引入了MPM(多进程模块),如Prefork和Worker,以提高服务器处理请求的能力。Prefork适合内存充足的环境,而Worker模式则结合了多线程和多进程,以实现更高的并发性能。 六、日志和错误处理 Apache 2.2...
6. **支持多线程**:Apache2.2引入了多线程模式(MPM,Multi-Processing Module),如prefork和worker MPM,以适应不同的服务器环境和负载需求。 【与PHP5.2.8和MySQL5.5.27的集成】:Apache2.2.29通常与PHP和MySQL...
Apache有两种主要的工作模式:`prefork`和`worker`。 - **prefork**模式适用于简单的静态内容服务,每个请求都会创建一个新的进程来处理。这种模式简单易用,但在处理大量并发请求时效率较低。 - **worker**模式...
Prefork适合内存充足的环境,而Worker模式则更适用于CPU密集型应用。 3. **安全性增强**:Apache 2.2.22在安全方面做了大量改进,包括加强了对SSL/TLS的支持,提供了更好的密码加密和证书管理。mod_security模块...
使用MPM(Multi-Processing Module)如prefork或worker模式,可以根据系统资源和需求调整服务器性能。 4. **更好的日志管理**:Apache 2.2.16 提供了更灵活的日志记录选项,可以自定义日志格式,并支持与其他工具...
Apache项目始于1995年,从最初的NCSA httpd 1.3源码发展而来,历经多个版本迭代,如1.0.0、1.1、1.2、1.3、2.0、2.2等,不断优化性能和增加新功能。 **Apache的运行模式**: Apache提供了两种主要的多处理模块(MPM...
3. 如果你的Apache版本使用的是`mpm_prefork`模块,你可能还需要修改`ServerLimit`指令,将其值设置为与`MaxClients`相同的值,如`ServerLimit 1500`。这是因为`ServerLimit`是`MaxClients`的上限,必须大于或等于`...
2. **多线程与事件模型**:支持MPM(Multi-Processing Module),如prefork、worker和event模式,以适应不同场景下的性能需求。 3. **安全强化**:内置了基本的身份验证和授权机制,如Basic和Digest认证,以及SSL/...
- **prefork/postfork**:Apache配置中的worker模式选择,以适应不同的负载情况。 ##### 3.3 初步迁移至Amazon EC2 - **迁移决策**:随着流量的不断增长,团队决定将整个系统迁移到Amazon EC2云平台上。 - **迁移...