并行运行的线程数较少 - Spring Batch Partitioning

时间:2015-02-04 03:58:13

标签: java spring spring-batch

我在Windows中实现了Spring批量本地步骤分区,网格大小为15,corepoolsize和maxPoolsize为10,所以当我执行它时,10个线程正在并行执行(数据大小为1百万条记录,它在50秒内完成,8 GB RAM配置)。

我想用更多的数据执行所以我们在linux上用相同配置(网格大小15,池大小为10)的1000万个数据执行jar,但是只用一个线程启动,然后在一段时间后启动另外两个线程等等。 Linux机器的服务器配置超过100 GB RAM(数据大小1000万,完成大约需要16分钟,我觉得它非常慢)。理想情况下,10个线程应根据我的配置并行运行,我很困惑。

xml配置为:

<batch:step id="step6">
    <batch:partition step="loadFlatFiles" partitioner="multiFileResourcePartitioner">
                <batch:handler grid-size="15" task-executor="loadCustomerTaskExecutor" />
    </batch:partition>
</batch:step>

<bean id="loadCustomerTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="10" />
<property name="allowCoreThreadTimeOut" value="true" />
</bean>

<batch:step id="loadFlatFiles">
  <batch:tasklet>
      <batch:chunk reader="masterFileItemReader" writer="masterFileWriter" processor="itemProcessor" commit-interval="5000" skip-limit="1000000" >
          <batch:skippable-exception-classes>
            <batch:include class="org.springframework.batch.item.file.FlatFileParseException"/>
          </batch:skippable-exception-classes>
          <batch:listeners>
            <batch:listener ref="recordSkipListener"/>
        </batch:listeners>
    </batch:chunk>
  </batch:tasklet>
</batch:step>

<bean id="recordSkipListener" class="com.cdi.batch.listener.RecordSkipListener" scope="step">
</bean>

<bean id="multiFileResourcePartitioner" class="com.cdi.batch.partitioner.MultiFileResourcePartitioner"
scope="step">
<property name="keyName" value="fileResource" />
<property name="fileName" value="fileName" />
<property name="directory" value="file:${input.files.location}" />
</bean>

是否有人遇到同样的问题,我想知道为什么它的表现如此?

更新:用于存储我在内存中使用的与作业相关的元数据

<!-- stored job-meta in memory -->
<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
    <property name="transactionManager" ref="transactionManager" />
</bean>

代码是使用Java 6和Spring批处理3实现的。

0 个答案:

没有答案