CIS-inbound locked up 问题

CIS-inbound locked up 问题
现象1, 一个大的xml可以通过,拆分成两个xml不行
现象2, 查看日志发现一条ci放到了toCimDB queue 中, 但是DBLogger没有取出
现象3, 增大queue maxsize 能解决现有问题
现象4, CIS-inbound是沿用adapter的逻辑, adapter没有问题。

原因1, 由于toCimDB 到 toBeQuery有一个循环的逻辑, 所以当toBeQuery满了,从toCimDB得到数据的线程会被阻塞。
一层层传递上去,所有的queue都会满了,所有的线程都被阻塞
原因2, 一个xml可以是因为input的速度大于output的, 而两个xml同时进来则input速度小于output的
adapter限制了input的速度,只会读头两个文件。

分析1, 在执行api, queue之前之后加上日志, 并将fileid附在后面,方便查找
分析2, 打印出queue的size, 可以发现最后所有的queue都到100了
分析3, 可以用jconsole来查看线程是否还活着。
其中
pool-1-thread-4
pool-1-thread-5
pool-1-thread-6
pool-1-thread-7
pool-1-thread-8
pool-1-thread-9
就是BulkProcessTask的线程号 Thread.currentThread().getName()
可以看到这几个都在wait状态。可以确认这些线程没有死掉。

CIS-inbound locked up 问题_第1张图片

性能问题可以用JVisualVM来查看哪个方法执行了过多的时间. 每次都new出不必要的实例,大对象。
CIS-inbound locked up 问题_第2张图片

客户本地的环境问题。 wsdl配置错误(用了EIT环境的链接)导致response要很长时间后才会返回。大幅度的影响性能。 需要查看客户的配置文件。

CIS-inbound locked up 问题_第3张图片




你可能感兴趣的:(Lock)