a)apache
端需要配置的核心参数:
apache/conf/httpd.conf
Xml
代码
-
Timeout 10
-
KeepAlive On
-
MaxKeepAliveRequests 5
-
KeepAliveTimeout 5
-
-
<IfModule mpm_prefork_module>
-
ServerLimit 3000
-
StartServers 750
-
MinSpareServers 5
-
MaxSpareServers 100
-
MaxClients 3000
-
MaxRequestsPerChild 10000
-
</IfModule>
(b)workers.properties
配置:
Xml
代码
-
worker.list=loader
-
-
worker.loader.type=lb
-
#
两
tomcat
负载均衡
-
worker.loader.balance_workers=tomcat1,tomcat2
-
#
不同步
session
-
worker.loader.sticky_session=false
-
-
#
负载
1
-
worker.tomcat1.type=ajp13
-
worker.tomcat1.host=localhost
-
worker.tomcat1.port=8009
-
#
负载均衡因子,决定
apache
分发的比例
-
worker.tomcat1.lbfactor=1
-
worker.tomcat1.socket_timeout=10#
配置超时时间
-
worker.tomcat1.connection_pool_timeout=600#
配置关闭空闲连接时间
-
-
#
负载
2
-
worker.tomcat2.type=ajp13
-
worker.tomcat2.host=localhost
-
worker.tomcat2.port=8109
-
#
负载均衡因子,决定
apache
分发的比例
-
worker.tomcat2.lbfactor=1
-
worker.tomcat2.socket_timeout=10#
配置超时时间
-
worker.tomcat2.connection_pool_timeout=600#
配置关闭空闲连接时间
(c)tomcat/conf/server.xml
配置:
Xml
代码
-
<Connector port="8009"
-
enableLookups="false"
-
maxProcessors="0"
-
maxThreads="3000"
-
minSpareThreads="100"
-
maxSpareThreads="200"
-
protocol="AJP/1.3"
-
enableLookups="false"
-
connectionTimeout="600000"
-
redirectPort="8443" />
优化配置核心关键:
(一)
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 | grephttpd | 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
了,但对于绝大多数情况来说仍是足够的。没有把它默认值设的更小的原因在于代码里还有点问题:有时发送一个包之后,计时器没有复位。
”
(二 )调整
jk
参数配置和
tomcat
设置
jk
连接主要给每个
worker
添加了两个参数:
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8109
worker.tomcat1.lbfactor=1
worker.tomcat1.socket_timeout=10
worker.tomcat1.connection_pool_timeout=600
首先来了解一下这两个配置参数:
worker.tomcat1.socket_timeout=10
worker.tomcat1.connection_pool_timeout=600
socket_timeout
默认为
0
设置
JK
与远程服务器的
Socket
连接超时秒数,如果超出此秒数则产生一个错误,并再次重试。如果为
0
,
JK
会一直等下去。在连接出现异常的时候,尽快关闭连接,从而保证无用的
socket
会被回收。
connection_pool_timeout
:默认值
0
,单位秒
在连连池中维护的非活动连接连续多少秒后被释放。如果为
0
,则不释放。详细可以参考
tomcat
官方文档,
jk
在处理连接的时候,是用一个线程池建立跟
tomcat
的连接,并且把所有连接都放在连接池。
如果这个值为
0
的时候,它就不会释放任何已经空闲的连接,也就是说这个连接池在某个瞬间压力很大的话,被撑大了就不会小下来。所以这个值一定不能使用默认的
0
,必须修改。官方推荐是
10
分钟,也就是
600
秒。一旦设置了这个值,就一定要注意:必 须同时设置对应的
tomcat
的
ajp
连接器配置里的
connectionTimeout
参数大小跟它完全一致!同时必须注意这两个参数单位不一样:
jk connection_pool_timeout
单位是秒,而
tomcatconnectionTimeout
单位是毫秒。
来解释一下为什么必须设置两个参数完全一致:这两个参数的意思是在连接空闲多长时间后关闭空闲连接
(
不包括活动的连接
)
。想象一下这边
apache jk
模块开启了一个连接
A
,连接到
tomcat
的
B
,这个连接被固化了,保持在连接池里。这个时候,如果
A
突然关闭,导致的结果是
B
返回的数据不知道给 谁,
tomcat
会抛出
socket
异常;如果
B
突然关闭,则
A
突
然失去连接,无法进行程序响应,会返回错误给用户。这就是所谓的半连接,一半是开的,另
外一半却关闭了,并且这个时候还不知道对方已经关了,程序会一直单方面开启着自己的这一半,导致资源浪费。所以必须设置两个的空闲关闭时间一致,这样两边
同时开启,在空闲时间等待到了相同的时间后,同时关闭。这样
jk
和
tomcat
建立的连接在空闲时会慢慢变小,从而保证资源不被浪费,空闲的
socket
被关闭回收。
调整
tomcat
配置参数
minSpareThreads="100"
maxSpareThreads="200"
connectionTimeout="600000"
空闲线程不用太多,减少系统负载。同时设置
connectionTimeout
和
jk
的
connection_pool_timeout
一致,保证空闲连接的同时回收。高并发情况下,这个时间可以设置得短一些,比如
:20000 ms
此配额的优点是:
apache
空闲线程少,同时产生的通过
jk
和
tomcat
建立的永久连接也少,并且和
tomcat
的连接能在空闲一定时间后自动回收。占用系统
socket
连接少。
可以通过以下命令对比查看各状态的
socket
连接:
查看当前
tcp/ip
连接状态:
netstat -n | awk'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
查看
tcp/ip
连接数:
cat/proc/net/sockstat
分享到:
相关推荐
二、Apache 2.2新特性与优化 1. 更强的安全性:Apache 2.2引入了增强的安全特性,如支持SFTP协议,增强了SSL/TLS安全配置,以及对mod_security模块的支持,帮助防御HTTP攻击。 2. 模块改进:更新了多个核心模块,如...
### Apache与Tomcat知识点概述 本篇文档主要围绕Apache服务器的配置进行展开,涉及了Apache的基本设置、多处理模块(MPM)配置以及HTTP头部信息的控制等方面的内容。此外,虽然文档标题提到了Tomcat,但文档内容并...
### Apache2.2安全配置和性能优化 #### 安全配置 **Apache禁止目录遍历:** 为了确保Apache服务器的安全性,防止恶意用户通过遍历目录来获取未授权的文件或者敏感信息,需要对Apache进行相应的配置。在Apache中,...
- **多线程与事件驱动**:Apache支持两种工作模式,预读取(Prefork)和工人(Worker),分别对应多进程和多线程模型,以优化资源利用率和响应速度。 - **强大的错误日志和访问日志**:提供详细的运行状态记录,...
Linux 下apache2-prefork-2.2.22-i586.rpm 快速安装包
### MySQL+Tomcat+Apache优化 #### 1. MySQL优化: ##### 1.1 简介: 在处理大量数据时,MySQL的优化至关重要。合理的内存分配不仅能提高系统的响应速度,还能有效避免因资源过度使用而导致的系统崩溃或性能下降...
- **MPM(多进程模块)**:Apache 2.4支持多种MPM,如`prefork`、`worker`和`event`,分别对应于不同的进程/线程模型,以适应不同的服务器负载需求。 - **HTTP/2支持**:相比于HTTP/1.1,HTTP/2提供了更高效的连接...
5. **性能优化**:Apache 2.2引入了MPM(多进程模块),如Prefork MPM和Worker MPM,它们分别对应于进程模型和线程模型,以提高服务器处理并发请求的能力。用户可以根据服务器硬件资源和负载情况选择合适的MPM。 6....
Apache集群性能优化是提高Web服务器处理能力的关键环节,特别是在高流量和大数据量的环境中。日志切分则是管理和分析服务器日志的一种有效方法,有助于监控系统状态、追踪问题以及进行性能调优。以下是对这两个主题...
Apache Linux x64是针对64位Linux操作系统的一款Apache Web服务器软件包。Apache HTTP Server(简称Apache)是最流行、最广泛使用的开源Web服务器之一,它以其稳定性和灵活性赢得了全球用户的青睐。在Linux环境下,...
apache2-prefork 64位快速安装包
1. **多线程模型**:Apache 2.2.4支持多种处理模型,如Prefork、Worker和Event,其中Worker模型适用于多线程环境,提高服务器性能。 2. **模块化结构**:Apache的核心功能通过模块实现,如mod_rewrite(URL重写)、...
本指南将深入探讨如何对Apache+Tomcat+Linux环境进行优化,以提升服务器性能、减少资源消耗并增强稳定性。 一、Apache优化 1. **配置优化**:调整Apache的配置文件`httpd.conf`,例如,减少`KeepAliveTimeout`以...
2. **线程支持**:Apache 2.2支持多线程模型(MPM,Multi-Processing Modules),如`prefork`和`worker` MPM,其中`worker`模式是线程化的,适用于高并发场景。 3. **安全性增强**:增加了安全相关的功能,比如支持...
./configure --host=arm-linux --prefix=/usr/local/cross-apache --enable-so --with-mpm=prefork --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --with-mysql=/path/to/mysql --...
4. **性能优化**:Apache 2.2提供了多种性能优化策略,如MPM(多进程模块)的选择,预读取(Prefork)、线程化(Worker)或者事件驱动(Event)模式,以及缓存机制和GZIP压缩等。 5. **错误处理与调试**:手册会...
- **编译过程**:Apache 2.2 支持多种操作系统,包括Linux、Unix以及Windows等。文档详细介绍了如何在这些不同的平台上编译和安装Apache。 - **配置选项**:提供了编译时可用的各种配置选项,帮助用户根据自身需求...