IHS性能调优参数设置经验总结1

更新时间:2024-03-19 07:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 文档摘要

1.1 文档分类

经验总结?IHS性能调优参数的设置

1.2 关键字/Tag

WAS6.0 IHS 负载均衡

1.3 摘要

在某单位的某项目中,AIX环境WAS6.0集群环境下,前端的集群分发使用的是IHS(IBM Http Server),在loadrunner的压力测试中,针对于IHS负载不均、不能响应请求等问题,作了一些性能调优参数设置方面的工作。本文会围绕这些相关参数的设置展开,来说明这些参数的意义以及参数之间的关联关系,并如何通过合理的参数设置来解决负载均衡且稳定的问题,最终达到IHS性能优化的目的。

1.4 定义、首字母缩写词及缩略语

IHS——IBM Http Server

2 具体内容

2.1 worker MPM和IHS基本原理

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

子进程有建立多个线程,以获得基于进程服务器的稳定性。

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

2.2 参数说明

参数设置文件路径:

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

#

# KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to \#

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

第 2 页 共 5 页

# ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves

ThreadLimit 2000 ServerLimit 500 StartServers 50 MaxClients 2000 MinSpareThreads 25 MaxSpareThreads 200 ThreadsPerChild 1000 MaxRequestsPerChild 0 参数说明:

1. keepAlive

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

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

第 3 页 共 5 页

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

4.StartServers是服务器启动时,服务器初始化的子进程数 ThreadsPerChild是每个子进程可以建立的线程数 ServerLimit是服务器可以创建最多的子进程数 ThreadLimit是每个进程允许建立最多线程数 MaxClients是IHS可以并行承担的最大请求数

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

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

2.3 参数配置

理解了上面的概念,就比较容易设置这些参数

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

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

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

4.如果keepAlive打开,为keepAlive on,那么一个用户连接服务器后的第一个请求便会占用一个服务线程,如果MaxClients个并发用户同时向服务器第一次发出请求,那么StartServers*ThreadsPerChild个线程是能够满足这些请求的,但是如果这些用户建立连接后,在KeepAliveTimeout范围内连续请求,那么就需要建立更多的子进

第 4 页 共 5 页

程和线程,因此ThreadLimit和ServerLimit值与KeepAliveTimeout范围内连续用户的请求数关系密切,假设这么多并发用户每一个用户在KeepAliveTimeout范围内连续用户的请求数为20,那么ThreadLimit*ServerLimit的值就必须是StartServers*ThreadsPerChild值的20倍,ThreadLimit和ServerLimit的值分配时,不能让其中任一值设定的太大,另一个值设定的太小,因为这个关系是进程和线程的关系,多线程和多进程的结合,讲究的是平衡,因此这两个值的可以预先设置,然后在通过几轮loadrunner压力测试,找到让IHS比较稳定的ThreadLimit值和ServerLimit的值

2.4 结合场景的实例

场景:在某单位的某项目项目中,在做loadrunner压力测试时,用户的并发量为1900,一轮(用户登陆到退出,期间有其他的操作请求)测试间隔为半分钟,一轮测试中各请求之间没有等待时间。

根据场景设定参数:

1.由于该系统是内网,比较安全,所以采用keepAlive on,KeepAliveTimeout设定为16,MaxKeepAliveRequests设置为0

2.根据keepAlive on和用户的并发量为1900,MaxClients设定为2000 3.根据上面的配置,StartServers设定为50,ThreadsPerChild设定为1000,StartServers*ThreadsPerChild=50000>1900, MaxClients是ThreadsPerChild的2倍(整数倍)

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

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

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

第 5 页 共 5 页

本文来源:https://www.bwwdw.com/article/w9t8.html

Top