您的位置:首页 > 其它

IHS配置优化建议

2016-05-08 15:46 176 查看
HIS配置优化建议

HIS实际上是IBM和Apache合作的一个产物,它基于稳定版的Apache webserver代码树,然后做了一些扩展,优化而来,所以在本质上各个参数和Apache webserver基本上是一样的,如下就从四个方面对HIS配置进行优化建议:

一、 worker MPM和IHS基本原理

1. worker MPM是多进程多线程的混合模式,使用线程来处理请求,可以获得处理海量请求,由于每个进程都要占用独立的内存单元,所以多进程耗内存,由于多线程是共享内存单元的,所以省内存,但是由于一个进程中的一个线程死掉,整个进程会死掉(多线程的缺点),所以多线程具有不稳定性,以多进程和多线程的结合,即服务器建立多个子进程,每个子进程有建立多个线程,以获得基于进程服务器的稳定性。

2.IHS就是基于worker MPM的模式,其工作原理是IHS根据负载的情况,增加或减少进程数量,一个单独的父控制进程负责管理(建立或删除)子进程,每个子进程可以建立多个服务线程和一个监听线程,监听线程监听请求并转发给服务线程处理。

二、 参数说明

参数设置文件路径:

IHS的参数配置文件:{ IHS_HOME }/conf/httppd.conf

配置中的重点参数:

#

# KeepAlive: Whether or not to allow persistent connections (more than

# one request per connection). Set to "Off" to deactivate.

#

KeepAlive On

#

# MaxKeepAliveRequests: The maximum number of requests to allow

# during a persistent connection. Set to 0 to allow an unlimited amount.

# We recommend you leave this number high, for maximum performance.

#

MaxKeepAliveRequests 0

#

# KeepAliveTimeout: Number of seconds to wait for the next request from the

# same client on the same connection.

#

KeepAliveTimeout 16

##

## Server-Pool Size Regulation (MPM specific)

##

# worker MPM

# ThreadLimit: maximum setting of ThreadsPerChild

# ServerLimit: maximum setting of StartServers

# StartServers: initial number of server processes to start

# MaxClients: maximum number of simultaneous client connections

# MinSpareThreads: minimum number of worker threads which are kept spare

# MaxSpareThreads: maximum number of worker threads which are kept spare

# ThreadsPerChild: constant number of worker threads in each server process

# MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule worker.c>

ThreadLimit 2000

ServerLimit 500

StartServers 50

MaxClients 2000

MinSpareThreads 25

MaxSpareThreads 200

ThreadsPerChild 1000

MaxRequestsPerChild 0

</IfModule>

参数说明:

KeepAlive

KeepAlive从英文的页面翻译看,是指在一次连接中是否允许处理多于一个的请求,即为持久连接,其配置决定了处理完客户端的HTTP请求后是否关闭TCP连接,即客户端访问后,是否始终保持连接,从而客户端如果还有请求,则会继续在这次连接中完成,而不需要重新建立新的TCP连接,这个可以减少客户端反复创建TCP连接和关闭TCP连接的时间,从而加速客户端的访问。On为打开,即持久化连接,Off为关闭,即一次连接,一个请求,下一个请求要重新建立TCP连接。

KeepAlive On和KeepAlive Off对比
KeepAlive
优点
缺点
On
相对比较消耗内存,因为每个连接都是一个独立的进程,如果每次的连接都是长连接,那么多个用户并发访问时,多个同时的连接同时造成多个进程,多个长时间的进程消耗的内存都不释放,那么这段时间内存消耗比较大
减少客户端反复创建TCP连接和关闭TCP连接的时间,客户端的访问速度非常快
Off
每次连接都是短连接,即每次请求后,马上释放内存,在一段时间内存的消耗总和比较小
由于每次请求都需要和服务器建立TCP连接和关闭TCP连接,所以服务器会多消耗一些CPU, 客户端的访问速度较慢
从上面的对比来看,如果服务器内存比较多,而且用户在连接服务器后,持续的进行很多操作,发出很多请求,那么建议KeepAlive On。

从配置文件中还会发现两个配置参数:MaxKeepAliveRequests为一个连接允许的最大请求数,即在建立一个连接后,没有超时(KeepAliveTimeout参数)的时间内,允许最大的请求数,这个一般设置为0,即无限制,不过建议在安全性很好的网站,或者内网设置为0,如果安全性不是很好,很容易被攻击(短时间内并发无数个请求,直到耗尽内存)。

StartServers是服务器启动时,服务器初始化的子进程数

ThreadsPerChild是每个子进程可以建立的线程数

ServerLimit是服务器可以创建最多的子进程数

ThreadLimit是每个进程允许建立最多线程数

MaxClients是IHS可以并行承担的最大请求数

MinSpareThreads和MaxSpareThreads是一个进程所设置的空闲线程的范围,如果请求到来时,已经在这个范围内,IHS会一边提供空闲线程处理请求,一边新建新的进程和线程,即MinSpareThreads和MaxSpareThreads起到一个缓冲的作用,不会让请求到来时,线程突然已经用完,需要等待新的进程和线程的创建

MaxRequestsPerChild设置的是每个子进程可处理的最大请求数

三、 参数配置

理解了上面的概念,就比较容易设置这些参数(最重要的内容)

1.MaxClients既然是IHS可以并行承担的最大请求数,那么就是配置参数的入口,假设系统平时并发的用户量上限为固定值,那么MaxClients的值就是该值。

2.StartServers是服务器初始化的子进程数,ThreadsPerChild是每个进程可以建立的线程数,那么StartServers*ThreadsPerChild是服务器初始化时的总的线程数,这个值必须大于等于MaxClients,才能满足用户并发请求数

3. MaxClients必须是ThreadsPerChild的整数倍(该设置应该不对Apache影响),否则IHS将会自动调节到一个相应值(可能是个非期望值)

4.如果KeepAlive打开,为KeepAlive on,那么一个用户连接服务器后的第一个请求便会占用一个服务线程,如果MaxClients个并发用户同时向服务器第一次发出请求,那么StartServers*ThreadsPerChild个线程是能够满足这些请求的,但是如果这些用户建立连接后,在KeepAliveTimeout范围内连续请求,那么就需要建立更多的子进程和线程,因此ThreadLimit和ServerLimit值与KeepAliveTimeout范围内连续用户的请求数关系密切,假设这么多并发用户每一个用户在KeepAliveTimeout范围内连续用户的请求数为20,那么ThreadLimit*ServerLimit的值就必须是StartServers*ThreadsPerChild值的20倍,ThreadLimit和ServerLimit的值分配时,不能让其中任一值设定的太大,另一个值设定的太小,因为这个关系是进程和线程的关系,多线程和多进程的结合,讲究的是平衡,因此这两个值的可以预先设置,然后在通过几轮loadrunner压力测试,找到让IHS比较稳定的ThreadLimit值和ServerLimit的值

四、 结合场景的实例

场景(各请求中没有对待时间):在项目中,在做loadrunner压力测试时,用户的并发量为1900,一轮测试间隔为半分钟,一轮测试中各请求之间没有等待时间。

根据场景设定参数:

1.假设该系统是内网,比较安全,所以采用keepAlive on,KeepAliveTimeout设定为16,MaxKeepAliveRequests设置为0(一般不建议)

2.根据keepAlive on和用户的并发量为1900,MaxClients设定为2000

3.根据上面的配置,StartServers设定为50,ThreadsPerChild设定为100,StartServers*ThreadsPerChild=5000>1900, MaxClients是ThreadsPerChild的20倍(整数倍)

4.一轮测试中各请求之间没有等待时间,估算KeepAliveTimeout(16)范围内,可能会产生20个请求,20*StartServers*ThreadsPerChild=20*50*100, ServerLimit设定为200,ThreadLimit设定为500

5.MinSpareThreads设定为25,MaxSpareThreads设定为200

6.MaxRequestsPerChild设置为0(为测试所设),即每个子进程可处理的最大请求数没有限制

最后,强烈推荐MaxRequestsPerChild不要设置为0,设置为非0,可以保护Apache进程免遭内存泄漏的影响,因为你不知道运行在Apache上的应用程式在什么时候会出错导致内存泄漏。

原创文章,转载请注明:转载自http://www.whohelpme.com/blog/main/NO1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: