日常问题汇总

一.关于定时任务的问题

:spiral_notepad:3.1 或2.9 以下bp 的定时任务有问题,启动bp就开始执行定时任务(时间未到就执行),在3.22 和2.9 已经修复。

二.kcbp3.22 版本,连接某些odbc数据源失败,配置没问题

:spiral_notepad:某些操作系统版本的系统dsn不支持64位,要配置用户dsn,要确保dsn可以支持64位。
image

三.某些操作系统下任务管理器中看不到KCBPDaemon.exe进程

:spiral_notepad:任务管理器显示问题,通过tasklist命令可以查看到
image

四.KCBPsetup 报Please enter an integer between 1 and 5000


:spiral_notepad:kcbpconf.xml 中maxspditem maxsubscribe maxpub应在 1和5000之间。

五.U版kcbp 3.11 接收消息后,kcbpas阻塞,pstack查看后,阻塞在msgrcv接口

:spiral_notepad:
按照文档修改 内核中消息大小,设置为65536,一般是默认设置太小了
调一下内核参数
应按如下设置
max size of message (bytes) = 65536
image

六.U版KCBP报错

关键字:CRuntimeTable、Find、unlock exception、Invalid argument


:spiral_notepad:
操作系统内核信号量配置不合适
------ Semaphore Limits -------- max number of arrays = 1024 // semmin 最大信号量集个数
max semaphores per array = 250?//semmsl 每信号量集中最大信号量数
max semaphores system wide = 256000 //semmns信号量最大个数>=semminsemmsl*
max ops per semop call = 32?//?semop系统调用允许的信号量最大个数 此值会影响能启动的最大AS进程数,如果要配置N个as进程,该值可设置为2N。*
semaphore max value = 32767。

七.KCBPsetup 需要注册ocx控件

image
:spiral_notepad:注册Ocx控件,方法如下
image

八.IMDB_Open failed


:spiral_notepad:程序权限不够,应改为管理员权限运行

九.U版kcbp启动报错

dispatch StartWorkerThread LockArea 0 36 fail
:spiral_notepad:系统信号量 达到上限,可以增加max number of arrays 的值,或减少线程个数。
getip:ioctl:No such device


:spiral_notepad:kcxpapi取ip地址报的,没有eth0这个设备.升级api就不会报了

十.WIN版kcbp启动报错


:spiral_notepad:kcbpspd中有空的配置,name字段不能为空,一般是最后一行。

十一.bp的runlog 日志打印的req ans时间戳之差有三秒,ans里面的cost耗时字段却只有两百多毫秒

:spiral_notepad:经查是系统消息队列深度设置较小。

十二.kcbp收到多播消息,但是同步失败

:spiral_notepad:
经查是listenmode=1造成的,应该改为listenmode=0,listenmode=1不会从内部队列取多播调用请求。

十三.win7 下,kcbp启动崩溃

:spiral_notepad:
是界面直接崩掉,删掉bp下的mfc42.dll即可,是mfc42.dll与系统自带的mfc库有冲突。

十四.KCBP启动报 kcbpas崩溃

:spiral_notepad:
kcbp进程模式启动kcbpas崩溃,线程模式运行没问题,机器中毒了,开不了新的子进程。


十五.KCBP启动报 Log thread fail

:spiral_notepad:
日志配错forward模式,导致单个日志文件太大,达到5G导致启动打开日志失败。

十六.客户咨询 KCBPCLI_ACallProgramAndCommit 在网络中断的情况下,要卡着30秒甚至一分钟才能返回,tagCallCtrl 有个参数 nExpiry, 设置了也没有用。

:spiral_notepad:
nExpiry 设置的是kcxp_put的KCXP_PMO结构体超时时间,就是put中recv的超时,
这种问题是由于 KCBPCLI_ACallProgramAndCommit,接口中网络中断的情况下做了重连,
可以把ConnectSever时的超时设置短点就可以了。

十七.KCBP报错 CIMDBSyncServer WSAJoinLeaf() fail:10042

:spiral_notepad:kcbp所在的机器不支持多播协议,参照以下步骤设置下注册表项


十八.U版KCBP报错 CListenThread::Run()retry send fail,errno=22

:spiral_notepad:
msgsend报的错,这个是消息队列里面的消息大小设置太小了,调一下内核参数,应按如下设置:
max size of message (bytes) = 65536
image

十九.kcbp 未配置imdb选项,仍接收到多播消息

:spiral_notepad:
kcbp 未配置imdb选项,会按照 224.0.0.100/8200的默认地址去接收,所以可以增加一个imdb选项,跟默认地址不一样的端口,如果不想触发,去掉 kcbpspd.xml中 userexitnumber="28"的配置改成userexitnumber=“0”。

二十.bcp_init failed

:spiral_notepad:一般是odbc驱动不匹配问题,odbc1pc.dll的bcp功能只支持默认动,odbc1pc_od13.dll 的bcp功能只支持odbc13.1,参考如下图片。
image

二十一.KingdomWrapper.dll 报错 添加应答结果集失败

:spiral_notepad:一般是应答xml规则配置错误,必须配置一条应答规则。

二十二.对接U版2.0 bp的kingdomwrapper的配置

:spiral_notepad:
U版2.0 kcbp返回的应答包corrid不是数字,不能根据corrid来取应答,
在xaopen中增加选项 tradesystem=KDNGUNIX。kingdomwrapper的版本如下:
image
规范配置如下:
image

二十三.dispatch StartWorkerThread WaitForMultipleObjects 0 4 fail,258 StartWorkerThread fail

:spiral_notepad:一般由于xa连接慢导致as启动超时,把startimeout 的值加大 2.把as个数减少。
image

二十四.启动报wow64 disabled

:spiral_notepad:kcbp授权码不对,不支持64位机器。需要win32加强版授权。

二十五.启动odbc xa报错, mixedconfig 表不存在

:spiral_notepad:
没有mixedconfig表的系统,增加环境变量SECURITYNAME的配置,值为券商名称或公司名称。
image

二十六.连接xa 报2044,重启后正常

:spiral_notepad:
第一次连报2044,重启下再连就正常 ,连接的时候没连上会报,比如kcxpapi.ini中TcpConnectTimeout设置得很短,已经全部改20s了。

二十七.用KCBPCLI连接BP时缺省会进行登录,如何设置不登录?

:spiral_notepad:

int nAuth = 0 ;
KCBPCLI_SetOptions(hHandle, KCBP_OPTION_AUTHENTICATION, &nAuth, sizeof(nAuth)) ;

二十八.如何设置LBM不返回应答给客户端?

:spiral_notepad:
设置KCBP_OPTION_RETURNFLAG

int iValue = 0; 
KCBP_SetOptions(hHandle,KCBP_OPTION_RETURNFLAG,&iValue,sizeof(int));

二十九.如何设置请求报文的超时时间,生命周期?

:spiral_notepad:
KCBPCLI_SetOptions通过KCBP_OPTION_TIMEOUT宏设置,
注意:超时时间,生命周期都通过该接口设置,两者相同。

三十.如何配置BP应答包的生命周期、超时时间?

:spiral_notepad:
由externalqueue中的timeout配置超时时间,lifetime配置生命周期。 注意: U版2.X版本BP超时时间和生命周期都由timeout属性配置。

三十一.kcbp如何进行分包?

:spiral_notepad:
kcbp向XP返回应答时,以32K为单位进行分包处理。缺省的,调用lbmapi生成结果集,在调用RsSaveRow接口时会进行判断,如果当前缓冲区长度>28K会自动向XP返回应答数据。注意:KCBPWIN 2.91配套的lbmapi之前的版本,在RsSaveRow返回给XP时,没有考虑到32K分包机制可能导致此次返回的最后一个分包不是完整的一行,在某些极端情况下,客户端读取这些行时读不到对应数据。

三十二.如何设置LBM中按行返回,即调用RsSaveRow生成一行时就进行返回,使得前端可得到进度条信息?

:spiral_notepad:
*设置KCBP_OPTION_RETURNFLAG *

int iValue = 2; 
KCBP_SetOptions(handle2,KCBP_OPTION_RETURNFLAG,&iValue,sizeof(int));

三十三.在LBM中如何获取当前调用的LBM号?

:spiral_notepad:
char szParam[20] = {0,}; KCBP_GetSystemParam(tempLbmHandle,KCBP_PARAM_SERVICENAME,szParam,sizeof(szParam)-1);

三十四.如何设置KCBPCLI记录发包和收包的日志?

:spiral_notepad:

int iTrace = 1; 
KCBPCLI_SetOptions(hHandle, KCBP_OPTION_TRACE, &iTrace, sizeof(iTrace));

三十五.KCBP WIN和UNIX3新增的listenmode=1与原有的listenmode=0有什么区别?

:spiral_notepad:
listenmode=0由listener监听线程监听XP队列,将xp中的请求消息放到内部队列,as从内部队列中取请求消息;listenmode=1时,不存在专门的listener监听线程,由as直接从指定的请求队列中取消息。此时分配给某个队列的as数为externalqueue中配置的listener数。Listenmode=1,配置的总as数应大于listener数之和。注意:listenmode=1时,retryinterval应该配置>=3,防止队列管理器名配错导致不断快速重连将CPU占满。

三十六.如何计算KCBP与KCXP的连接数?

:spiral_notepad:
KCBP WIN和KCBP Unix3: listenmode=0: KCBP和XP连接数 = 请求队列中配置的listener数之和。 KCBPAS和XP连接数 = AS数 + 和XP连接的XA数 * AS数。 listenmode=1: XP连接数= AS数 + 和XP连接的XA数 * AS数。 KCPB Unix2: BP与XP连接数和listener,biz,dispatch无关,按照如下公式计算: XP连接数 = external queue中(包含transfer,dispatch两种类型)direction="receive"的各节配置的poolsize之和2。*

三十七.IMDB内存数据库缺省大小多少?是否可调整?

:spiral_notepad:
IMDB缺省共享内存大小为256M,可通过环境变量IMDBSHMSIZE调整,单位为MB。

三十八.Log配置的范例

image

三十九.KCBPCLI异步提交的MSGID重复
:spiral_notepad:
KCBPCLI_ACallProgramAndCommit入参tagCallCtrl.szMsgId未置零。