Google

Thursday, October 28, 2004

About AXIS Kernel Parameter

我查了AIX5.2 的文档,好多核心参数是不用调整的,系统会自动调整,包括

MSGMNI:消息队列标识符的数量,最大为131072
MSGMAX:最大消息大小,最大为4M
MSGMNB:消息队列包含最大字节数,最大为4M
MSGMNM:队列中包含的最大消息数,最大为524288
SHMMAX: 最大共享内存段的尺寸,最大为256M for 32-bit and 0x80000000u for 64-bit
SHMMIN: 系统中最小共享内存段的尺寸,最小为1
SHMMNI: 最大共享内存标识的数量,最大为131072
SEMMNI: 系统使用的信号量标识的最大数,最大为131072
SEMUME: maximum number of undo entries per process,最大为1024

但是这几个参数我没有查到,应该怎么处理呢?
SEMMAP:用来管理信号量集的控制面板的尺寸
SEMMNU:系统中undo structures 的数量
SEMMSL:每个信号量集所能包含的信号量的最大值
SEMMNS:系统使用的信号量的数量的最大值
MSGMAP: 用来管理消息队列的控制面板的尺寸
MSGSSZ: size of a message segment
MSGTQL: number of outstanding messages
MSGSEG: number of message segments in the system
SHMSEG: 一个进程中最多共享内存段的数量

AIX的内核参数是不允许用户调整的。系统自适应的。

Non MSSA start & stop mechnism

billpay SRVGRP=GROUP1 SRVID=1 MIN = 5 MAX = 10
像样的配置,意思是服务启动的个数在5和10之间,
那么什么情况下会又启动一个服务呢?我查了文档,下面这个配置的含义是当有服务的个数低于2个并持续120s时,就再启动一个服务,当服务的个数超过6个5s时就停止一个服务。但是文档中说这是MSSQ时的情况。
CLOPT="-A -r -p 2,120:6,5"
我的问题是,如果不是MSSQ,又设置了多个server,启动和停止server的策略是什么呢?
不知道说清楚了没,呵呵

如果不设-p 是不会自动起停的,但是你可以手工起停,MIN/MAX把相应的SVRID位置帮你占住了

Wednesday, October 27, 2004

[BASIC] TMS and TOLOG for Global Transaction

一个CLIENT 调用 服务A 和B
服务A / B 分别属于不同的TMS
那么这句话
The TMS that coordinates global transactions uses the TLOG file. Each machine should have its own TLOG.
(1) 做coordinator 的TMS是哪个?
(2) 如果A/ B 是发布在不同的主机,那么会记录1个还是2个TLOG

我知道第一个问题了
TPINIT.grpname Field used for direct client participation in a transaction. The name must be the name of a group listed in the configuration file

如果服务A/ B 是发布在同一主机上,但是连接不同的RM,也就是你说得不同的TMS,那么只会记录在1个TLOG上。

如果服务A/ B 是发布在不同的主机,而它们又在同一个全局事务中,那么会分别记录在各自的TLOG上。

[PROGRAMMING] Not encought license due to no tpterm for tpinit

[bugu ]
连续调用10次有不同的含义:比如,做一次tpinit(),然后连续调用10次service是连续调用10次;做一次tpinit(),调用一次 service,这样做10次,也是连续调用10次。但是,从lic的角度而言,这两种方式是不同的。tpinit()负责建立连接,tpterm()负责断开连接,一个tpinit()对应与一个lic,所以tpinit()与tpterm()是一对操作。如果使用前者的调用方式,同一时刻只占用了一个 lic;如果使用后者的并发调用方式,同一时刻占用了10了lic。所以,在做应用的时候,可以考虑客户端同时采用长连接与短连接两种方式。


[hanker1999]
tpterm ()只负责断开连接,不负责应用自己分配的内存的释放动作。所以,在tpterm()之前,必须用tpfree()释放那些用tpalloc分配的内存。当然,如果某buffer是用tpalloc()分配的,而你在tpreturn()中使用了此buffer,就不用再执行tpalloc()释放了。

[PROGRAMMING] The maximum length of string buffer

使用tpcall同步调用,并用string类型的buffer能传递的string最大长度是多少?

如果你对一个STRING类型使用tpalloc创建时,如果不指定大小,Tuxedo默认为512 bytes。对于可以创建的最大值,好像没有要求,根据系统的物理情况而定。与tpcall无关。

If not specified, by default it is 512 bytes. As to the maximum lenght , I think depends on kernel parameters's setting.

[pclt] client long connection

在打印printclient 的时候 ,为什么有状态为IDLE/W 的连接,而且他的连接时间达到了几个小时? 是因为客户段程序死掉了吗,BBL 为什么不清理掉它?
另外有什么办法可以让IDLE/W的数量减少,让客户段尽快释放连接.好让别的请求可以得到响应.可以少点LIC
感觉系统很忙,感觉要加LIC了.

那种几个小时的链接可以肯定的判断,进程已经被挂死了,这时需要人工的干预才能清除,使用bbc或是在后台使用kill将进程杀掉,另外,你可以人工控制客户端的链接时间,如果超时,就断开,让别的等待进程继续,一般都是几十妙的时间,最大就是600S了,因为tuxedo本身的最长时间也就是600S。

UBBCONFIG->WSL中加入-T number(单位:小时),客户端的空闲连接时长。如果已连接的客户端在此时间内没有任何动作,BBL自动清除此连接。
建议考虑客户端根据具体业务需要,可采用长连接和短连接共用的方式,可有效节省lic的数目,也可避免不必要的开销。

MAXACCESSERS and MAXWSCLIENTS

MAXACCESSERS计算的是:并发连接到BB的最大clients和servers数目。
-x是一个WSH能够处理的client数量。
如果MAXWSCLIENTS 设置的大,那么并发的client和server就可能大,否则不能设置大的MAXWSCLIENTS ,所以你的MAXACCESSERS 也要设置的大一些

那么,增大-X 是不是可以少用lic数呢?
不能。-x和lic并没有直接的关系。lic是并发的user数量。增大-x的参数,只是WSH处理的client数量增多,client的数量多了,那么lic数量也上来了。所以不能解决lic的user小的问题。