阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache 优化配置 prefork模式

125次阅读
没有评论

共计 2871 个字符,预计需要花费 8 分钟才能阅读完成。

(一)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 了,但对于绝大多数情况来说仍是足够的。没有把它默认值设的更小的原因在于代码里还有点问题:有时发送一个包之后,计时器没有复位。”

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2871字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中