Multithreading Spring集成-任务执行器卡住

Multithreading Spring集成-任务执行器卡住,multithreading,spring-integration,Multithreading,Spring Integration,我正在开发一个已经存在的Spring集成代码,它正在被卡住 下面的代码正在被删除。从sql查询中提取大约20000条记录并发送到splitter 代码: 编辑2: 我的问题是否与以下链接中提到的问题相关: 另外,我不清楚轮询器的接收超时属性。接收超时是轮询器(reqExecutor)线程在队列通道中等待消息到达的时间。如果在没有消息到达后过期,线程将返回池 如果消息到达,它将在线程上处理,然后线程返回池 如果您无法从线程转储中解决问题,请将其发布到某个地方(不是这里-可能太大)-pastebi

我正在开发一个已经存在的Spring集成代码,它正在被卡住

下面的代码正在被删除。从sql查询中提取大约20000条记录并发送到splitter

代码:

编辑2:

我的问题是否与以下链接中提到的问题相关:


另外,我不清楚轮询器的接收超时属性。

接收超时是轮询器(
reqExecutor
)线程在队列通道中等待消息到达的时间。如果在没有消息到达后过期,线程将返回池

如果消息到达,它将在线程上处理,然后线程返回池


如果您无法从线程转储中解决问题,请将其发布到某个地方(不是这里-可能太大)-pastebin或github gist。

在执行一些代码优化后,问题得到解决。代码中有两个主要问题:

  • HashMap键的hashcode和equals方法未被重写。hashmap用于缓存查询,但在没有重写方法的情况下,它无法正常工作

  • 在Spring集成代码中有一个insert查询,它插入记录大约20000次。因为,我们不能在Spring集成中进行批处理更新。所以,我将insert查询提取到java类中并进行批处理更新

  • 然而,我想知道,为什么线程转储和内存转储没有给出任何提示呢


    感谢Geek和Gary帮我解决问题。

    更改这些参数只会将瓶颈转移到其他地方。您甚至可以通过获取所有记录来解决问题。那么,在解决此类问题方面有什么建议或最佳做法吗?您可以尝试此配置的几种排列方式,但问题可能出在这些配置之外。除非您解决了实际问题,否则其他问题可能会出现阻塞。添加了有关此问题的更多更新。你能帮我一下吗?我想你是说“卡住”而不是“被击中”。如果是这样,最好的调试方法是进行线程转储以查看线程正在做什么。一般来说,这样的问题是由用户代码中的线程阻塞引起的。
    <int-jdbc:outbound-gateway query="..." />
    
    <int:splitter input-channel="..." output-channel="queueChannel"/>
    
    <int:channel id="queueChannel">
        <int:queue capacity="25" />
    </int:channel>
    
    <int:service-activator ref="..."
        input-channel="queueChannel" output-channel="..." method="xxx">
        <int:poller max-messages-per-poll="25" fixed-delay="100"
        receive-timeout="30000"  task-executor="reqExecutor"/>
    </int:service-activator>
    
    <task:executor id="reqExecutor" pool-size="25" queue-capacity="5" rejection-policy="CALLER_RUNS" /> 
    
    Received no Message during the poll, returning 'false'