骆驼文件使用方在从目录中使用大量文件时表现极慢

时间:2019-05-08 10:14:27

标签: java apache-camel switchyard

我正在使用switchyard,它是apache骆驼的包装纸。我的文件使用者从一个写入大量文件(有时为2,000,000个)的目录中使用。我的使用者的理想消耗速度是每秒1000个以上的文件,但是当写入超过50000个文件时,我的使用者会变慢,消耗速度会降低5倍。

我禁用了sortBy选项,甚至启用了shuffle选项。但是没有运气。这是我的文件绑定细节。

    <file:binding.file name="XXXXXXXXXXXX">
    <file:additionalUriParameters>
      <file:parameter name="antInclude" value="*.xml"/>
      <file:parameter name="consumer.bridgeErrorHandler" value="true"/>
      <file:parameter name="shuffle" value="true"/>
    </file:additionalUriParameters>
    <file:directory>directory path</file:directory>
    <file:autoCreate>false</file:autoCreate>
    <file:consume>
      <file:delay>100</file:delay>
      <file:maxMessagesPerPoll>20</file:maxMessagesPerPoll>
      <file:delete>true</file:delete>
      <file:moveFailed>directory path</file:moveFailed>
      <file:readLock>markerFile</file:readLock>
    </file:consume>
    </file:binding.file>

即使入站目录中有大量文件,如何使我的使用者保持1000个文件/秒的相同消耗速度?

2 个答案:

答案 0 :(得分:1)

您的配置告诉Camel:

  • 每秒轮询10次(延迟= 100毫秒)
  • 每次最多阅读20条

所以,我希望您每秒获得200个文件?

设置文件:maxMessagesPerPoll=200

当然,前提是您所有的下游处理都可以处理该额外负载。

正如@Conffusion上面所述,您正在重新排列文件列表。因此,这很可能会创建所有文件的列表,然后将其混洗并为您提供所需的编号。 您是否真的需要它作为您需求的一部分?

基本上...使用每个文件参数,看看会产生什么影响。

答案 1 :(得分:0)

我建议filesystem performance是根本原因,因为单个文件夹中有那么多文件。

您应该能够使用操作系统中的标准工具验证该假设,例如Linux上的ls或Windows上的dir。只需比较创建所有这些文件的命令的执行时间即可。

关于解决方案-我建议将这些文件分成子目录,如this answerNTFS performance and large volumes of files and directories问题中所述。