测试的时候,报文正常通过,一段时间之后,出现报文全部卡死,之后所有报文都不能正常通讯。(顶不住压力,交易量大就死)
1、重启平台之后,通讯暂时恢复,一段时间之后有卡死。
2、最开始怀疑,内存未回收,jni的变量和tuxedo的变量未回收,检查是否都tpfree和release掉。
3、跟踪jni的程序,发现进入jni函数之后,tpinit出现阻塞,导致之后所有交易都卡到,进jni的c程序之后。
4、去掉tpinit之后,发现程序都阻塞到了,tpcall里面。不tpinit,tpcall自动tpinit。
5、设置tuxedo 客户端,多会话模式,问题解决。
TPINIT * tpinfo = NULL ;
tpinfo = (TPINIT *)tpalloc("TPINIT", NULL, TPINITNEED(32));
if(tpinfo != NULL) {
// 设置多会话模式,适配多线程模式
tpinfo->flags = TPMULTICONTEXTS;
} else {
printf("tpalloc(TPINIT)失败\n");
return -1;
}
if ( tpinit(tpinfo) == -1 ) {
printf("tpinit err\n");
tpfree((char *)tpinfo);
return -1;
}
tpfree((char *)tpinfo);
tuxedo 客户端使用多线程时
在初始化时设置多上下文
当客户端准备好加入应用程序时,指定tpinit()并设置TPMULTICONTEXTS标志
tpinitbuf = tpalloc(TPINIT, NULL, TPINITNEED(0));
tpinitbuf->flags = TPMULTICONTEXTS;
if(tpinit(tpinitbuf)== -1){
ERROR_PROCESSING_CODE
}