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()释放了。
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.
client long connection
在打印printclient 的时候 ,为什么有状态为IDLE/W 的连接,而且他的连接时间达到了几个小时? 是因为客户段程序死掉了吗,BBL 为什么不清理掉它?
另外有什么办法可以让IDLE/W的数量减少,让客户段尽快释放连接.好让别的请求可以得到响应.可以少点LIC
感觉系统很忙,感觉要加LIC了.
那种几个小时的链接可以肯定的判断,进程已经被挂死了,这时需要人工的干预才能清除,使用bbc或是在后台使用kill将进程杀掉,另外,你可以人工控制客户端的链接时间,如果超时,就断开,让别的等待进程继续,一般都是几十妙的时间,最大就是600S了,因为tuxedo本身的最长时间也就是 600S。
UBBCONFIG->WSL中加入-T number(单位:小时),客户端的空闲连接时长。如果已连接的客户端在此时间内没有任何动作,BBL自动清除此连接。
建议考虑客户端根据具体业务需要,可采用长连接和短连接共用的方式,可有效节省lic的数目,也可避免不必要的开销。
printclient的一个问题
我发现了另外一个办法,那就是在server 上用
netstat -n
看连接情况,有长期连上来不断开的地址,再
看机器上运行了什么程序.
或者利用webgui看client的情况,还可以通过这个工具将长期连上来的client kill掉.
通过IP地址的办法,已经查到是经常在这些机器上运行的一个应用有问题.这个应用没有运行 tpterm(),已经与应用程序提供商交涉.
准备在WSL的参数中加上 -T 参数,避免这类问题.
谢谢大家.
How to retrive TUXEDO client's ip and port at server side
我的系统中能在ULOG.DDMMYY中可以发现客户端的IP和端口。
另外一个办法就是需要系统管理员的帮忙。
1. find the PID of WSH.
2. using "lsof -p " to find the listening port of WSH.
3. using "netstat -an |grep " to find current connecting clients's ip&port.
http://e-docs.bea.com/tuxedo/tux81/rf5/rf566.htm#1507139
T_CLIENT
TA_NADDR
TUXEDO客户端多线程调用
TPINIT * tpinitbuf;
tpinitbuf=tpalloc("TPINIT",NULL,TPINITNEED(0));
tpinitbuf->flags = TPMULTICONTEXTS;
ret = tpinit((TPINIT *) tpinitbuf);
转自:http://bbs.weblogicfans.net/thread-182-1-4.html