TUXEDO性能调优的基本方法一. 通过配置MSSQ服务器组提高性能在ATMI环境中(TUXEDO-CORBA服务器环境不支持MSSQ机制)可以通过配置MSSQ(多服务器单队列)机制来达到队列级负载均衡的目的。
同一组MSSQ服务器在同一时间将共用一个请求队列,当消息出队时,将被送到第一个空闲的服务器去处理。
如果服务器A属于某个MSSQ的一部分,那么必须为它配置响应队列,即设置REPLYQ=Y,这样当A调用了B服务时,B对A的响应将被回送到发出原始请求的服务器A,而不是MSSQ服务器组中的其它服务器。
MSSQ机制可以配置成动态形式,这样TUXEDO系统会根据负载状况动态地产生和消除MSSQ中的服务器。
在下列情况下,可以考虑配置MSSQ:应该配置MSSQ 不应该配置MSSQ服务器数量在2到12个之间 如果有多个服务器,折衷的办法是使用多个MSSQ请求缓冲区不是很大,没有大到将一个队列占满的情况 一个请求缓冲区可能会占满整个服务器队列空间。
所有的服务器都提供一组相同的服务 每个服务都提供不同的服务需要配置多个服务器进程才能满足客户机对服务器的实时性的要求。
每个MSSQ的服务器数量一般不要超过10个,如果超过10个,建议配置多个MSSQ。
在下面两种情况下,使用MSSQ将达到调优的效果:A.银行业务中,多个TELLER执行相同的服务来为客户提供服务,下一个空闲的TELLER将为下一个等候的客户服务。
在这种情况下,每个TELLER必须能够执行所有的客户服务。
在同一个MSSQ中的服务器必须在任何时候都提供相同的服务。
MSSQ的优点在于,它在队列级提供了第二种形式有的负载均衡。
B.在超市收款业务中,不同的CASHIERS接收不同形式的客户支付(如信用卡,现金等),在这种情况下,不推荐使用MSSQ。
例如:simpserv SRVGRP=GROUP1 SRVID=10 MIN=3 MAX=5RQADDR=simpserv REPLYQ=Y这个配置将启动3个simpserv进程,SVRID依次为10,11,12。
它们共享同一个请求队列simpserv。
在MSSQ配置中,建议设置MIN=MAX=N,这样在TUXEDO系统启动时,将一次性启动N个服务器,这就使得TUXEDO不必对MSSQ服务器的数量作动态管理。
N的设置要根据数据库服务器目前的压力情况来决定,而不是越大越好。
为了测试simpserv对请求的受理情况,在TOUPPER服务代码中加入一条延时语句sleep(1),启动25个并发用户,分别执行12个TOUPPER服务请求,使用tmadmin/psr命令打印MSSQ服务器组,得如下结果:> psr -q simpservProg Name Queue Name Grp Name ID RqDone Load Done Current Service --------- ----------- ----------- --- ---------- ----------- --------------- simpserv.exe simpserv GROUP1 10 101 5050 ( IDLE ) simpserv.exe simpserv GROUP1 11 99 4950 ( IDLE ) simpserv.exe simpserv GROUP1 12 100 5000 ( IDLE ) 由此可以看出,200个请求被平均分配给MSSQ中的三个服务器。
根据测试结果可以看出,服务器受理300个请求的最长时间近似于101秒,如果不配置MSSQ 模式,服务器受理300个请求的最长时间近似于300秒。
MSSQ服务器组的请求/响应过程二. 通过配置负载均衡提高性能要缓解由于系统繁忙而造成的应用服务器性能下降,可以考虑在应用程序中使用负载均衡技术,在这种情况下,每个服务都有一个负载因子,每个服务器都一个总体负载。
服务请求总是被送到负载最小的服务器去接受处理。
可以按照如下步骤来实现系统范围内的负载均衡:1.在某个时间段内对TUXEDO应用程序进行观察,记录下每一个服务的平均执行时间Ti,并求出所有服务的平均执行时间,记为T。
2.在配置文件的*RESOURCES段,设置LDBAL=Y。
3.在*SERVICES段,对每一个服务的LOAD因子进行配置,如果Ti≈T,则设置LOAD=50;如果Ti>T,则设置LOAD=N(N>50);如果Ti<T,则配置LOAD=N (N<50)。
说明:这个方法尽管很奏效,但代价太高,只有在必要时才使用,也就是说,只有在多个服务器(非MSSQ服务器组)同时提供了某一服务的情况下才使用,如果这个服务仅由一个服务器提供,或者说由多个MSSQ服务器提供,则没有必要使用负载均衡。
补充(常用来测量服务执行时间的两种方法):1.管理方法。
在配置文件中,加一个选项可以将服务的所有执行记录写到标准错误。
方法是在SERVICES段中指定:servopts –r,要分析这个日志文件,使用txrpt命令。
2.编程方法。
在调用服务的前后,分别加一个time()调用,耗时最长的服务一般来说具有最大的负载,耗时最短的服务一般来说具有最小的负载, 三. 通过配置优先级参数提高性能应用程序中,通过设置优先级的方法来控制数据流向,以使重要的请求优先被服务。
可以按如下两种方法设置优先级:1.管理方法。
在配置文件的SERVICES段中,为每一个服务指定PRIO因子。
2.编程方法。
在客户机或服务器代码中,加入tpsprio()调用,动态设置优先级。
只有特定的用户才能设置服务的优先级。
使用优先级的例子:SERVER1提供了A,B,C三个接口,A,B的优先级为50,C的优先级为70,对C 接口的请求比对A和B接口请求的要先出队,对A和B接口的请求接FIFO的原则出队,为了避免某些请求出不了队,系统每隔10个请求按FIFO正常出队一次。
PRIO参数决定了接口或服务在服务器队列中的优先级,因此必须谨慎使用。
一旦设置的优先级,就会有一些请求在队列里停留更长的时间。
当你最终决定了要使用PRIO参数,请遵守如下原则:1.由于高优先级的接口请求先出队,因此只能给一些不经常被调用的接口或服务设置高优先级。
2.在你把一个服务或接口的优先级调低之前,你应确保这个服务或接口的响应时间并不重要才行。
四. 通过绑定多服务提高性能通常情况下可以不对服务进行绑定(即一个SERVICE对应一个SERVER),从管理维护的角度来看,这是最简单的方式,但随着应用规模的扩大和服务器数据的增多,对系统的IPC资源(消息队列和信号量)的需求量也随之增加,这可能导致TUXEDO系统无法启动,因此需要在绑定和不绑定之间找到一个平衡点。
作服务绑定时,应该遵守如下原则:1. 把业务功能相似的SERVICES绑定到一个SERVER中。
如果多个服务执行的功能非常类似,你可以把它们绑定到同一个服务器中,这样在某一时刻,应用程序要么提供这组服务,要么不提供,便以管理。
在BANKAPP中,WITHDRAWAL,DEPOSIT,INQUIRY服务是可以绑定到一个叫做“银行柜台机操作”的服务器中。
2. 把调用了相同链接库或其它资源的SERVICES绑定到一个SERVER中。
如果你把调用了相同链接库的服务绑定在一起,它们将占用较小的磁盘空间。
例如,三个服务都调用了一个100K的库,如果把它们绑定到一个服务器中,将节省200K的磁盘空间。
3. 执行时间相近的SERVICE可放到同一个SERVER中。
4. 同一个SERVER中的SERVICE最好有相同的服务优先级,如果不同,优先级最低的那个的请求可能要很长时间才得到处理。
5. 不要相互调用的SERVICES放在同一个SERVER中,这有可能导致服务器死锁。
6. 一个SERVER中不要绑定太多的SERVICE。
7. 对一些使用率较高的服务,如银行的取款服务WITHDRAWAL,应该单独把它放到一个SERVER中,并采用MSSQ方式。
作服务绑定时,要考虑队列的容量。
由于服务器的队列大小是有限的,所以我们要根据队列的处理能力来绑定服务。
把服务加到一个未满的MSSQ中时,可执行程序的大小也会相应地增大,但系统中的队列数量将保持不变,当队列满时,系统的响应性能就会下降,这时你就必须把它拆分成多个服务器来补偿。
五. 通过关闭附加特性来提高系统总体性能(说明:以下性能调优方式仅适用于TUXEDO8.0及以后版本)A.服务和接口缓冲TUXEDO8.0及以后的版本都支持服务和接口的缓冲,这样客户机可以直接请求高速缓存中的服务或接口的副本,而不必到公告板中去查找。
这一特征会显著地改善服务器的性能,尤其是当系统有大量的用户,而只有少量的服务的情况。
SICACHEENTRIESMAX被加到配置文件的NES和SERVERS段中,来定义最大服务缓冲入口数量。
由于缓冲机制不是对每一个客户机和应用程序都有用,TMSICACHEENTRIESMAX环境变量用于控制缓冲区的大小。
服务缓冲特性在如下情况下将受到限制:1.如果一个服务有路由标准,则不能被缓冲;2.如果服务上有类型缓冲区类型的限制,则不能被缓冲;3.如果服务所在的组是预定的(如TMS服务),则不能被缓冲;4.如果服务入口的数量为0,则不能被缓冲;B.去除验证和审计安全特性TUXEDO7.1中引入了AAA(Authentication, Authorization, Auditing)安全特征,如果应用程序不使用TUXEDO的AAA安全特性,可以将它关掉来削减这些不必要的额外的开销。
对于8.0及以后的版本,可以把NO_AA选项加到RESOURCES段的OPTIONS参数中来阻止系统调用相关的安全函数,这样以下安全参数将受到影响:A. NONE,APP_PW,USER_AUTH参数将继续正常工作,但不做authorization或auditing工作。
B. ACL和MANDATORY_ACL参数将继续起作用,但只使用BEA的缺省安全机制。
C.关闭多线程处理TUXEDO7.1引入了一般的线程特性,由于TUXEDO体系结构的原因,ATMI函数必须调用互斥体函数来保持敏感的状态信息,除此以外,引擎层和缓冲机制也产生了大量的互斥体。
对于没有使用线程的应用程序,在不改变代码的情况下,关闭线程特性将使应用程序性能显著提高。
在TUXEDO8.0及以后的版本中,TMNOTHREADS环境变量被用于控制是否使用线程特性。
当TMNOTHREADS被设置为YES,将避免调用互斥函数。
D.关闭XA事务尽管不是所有的TUXEDO应用程序使用XA事务,但所有进程都调用了内部事务谓词来产生额外的事务开销,对于不使用XA事务的TUXEDO8.0应用程序,可以使用NO_XA标记不阻止事务开销。