Performance Spring批处理-性能调优

Performance Spring批处理-性能调优,performance,spring,spring-batch,Performance,Spring,Spring Batch,我们开发了一个spring批处理应用程序,其中有两个流。1.转发2。向后的我们只使用文件读/写,不涉及数据库 正向场景:输入文件将包含22个字段的记录。通过执行序列号生成和添加少量填充字段等操作,将22个字段转换为32个字段。根据国家代码,输出将分为最多3个。每个区块将有250K条记录。(如果记录以百万为单位,则将为同一国家/地区生成多个文件) 800万条记录需要36分钟 800万条记录将保存在一个文件中 我们使用的是spring批处理线程1000个线程 反向流:输入文件中每个记录有82个字段。

我们开发了一个spring批处理应用程序,其中有两个流。1.转发2。向后的我们只使用文件读/写,不涉及数据库

  • 正向场景:输入文件将包含22个字段的记录。通过执行序列号生成和添加少量填充字段等操作,将22个字段转换为32个字段。根据国家代码,输出将分为最多3个。每个区块将有250K条记录。(如果记录以百万为单位,则将为同一国家/地区生成多个文件)

    800万条记录需要36分钟

    800万条记录将保存在一个文件中

    我们使用的是spring批处理线程1000个线程

  • 反向流:输入文件中每个记录有82个字段。这82个字段将转换为86条记录。这两个字段将添加到中间,这两个字段取自正向流输入文件。其他字段只是简单地复制和粘贴。错误记录也要写入错误文件。错误记录只不过是向前流动的实际输入记录。为了跟踪,我们将序列号和实际记录保存在一个文件中,这是在正向流中完成的。我们在反向流中获取持久性文件并比较序列号,如果缺少任何内容,则通过键、值对写入错误记录。此过程在反向流动完成后完成

    输入文件的最大大小为250K

    800万张唱片花了1小时8分钟,这太糟糕了。 32个文件(每个250K)将用于此流程中的输入。 在后退中没有使用线程。我不知道线程使用情况如何。我试过了,但过程受阻

  • 服务器配置:

    • 12 CPU和64 GB Linux服务器

      你们能在这方面帮助我们提高性能吗?因为我们有12个CPU/64GB的RAM


    您已经使用了1000个线程,这是一个非常高的数字。我已经微调了spring批处理作业,这就是我所做的 1.减少网络流量-尝试减少每个进程中对数据库或文件系统的调用次数。你能一次获得所有可能的信息并将其保存在内存中以供线程使用吗?我使用org.apache.commons.collections.map.MultiKeyMap存储和检索数据。 例如,在您的情况下,您需要序列号比较。因此,在开始这个过程之前,将所有序列号放入一个映射中。您可以将ID(如果不是太多)存储到步骤执行上下文中

  • 减少书写频率-将需要书写的所有信息保存一段时间,然后在结尾处进行书写

  • 将进程结束时未使用的对象设置为null以加快GC

  • 通过VisualVm或Jconsole检查GC频率。当进程运行时,您应该会看到频繁的GC发生,这意味着正在创建对象并进行垃圾收集。如果你的记忆图持续增加,那就有问题了


  • 戈文德,你的问题很笼统,没有足够的数据来提出任何建议。我建议您使用诸如jProfiler、VisualVM等探查器来监视JVM和代码,看看这是否会带来一些有用的东西!