首页 > 解决方案 > Univocity - 解析一行固定宽度的平面文件 - 300 个并行线程的性能影响

问题描述

我们有一个每天处理数百万笔交易的项目,它有一些严格的 SLA。作为解析作为 bean 输入的平面文件的一部分,我们使用了 beanio,它在没有负载的情况下工作得更好。但是负载大约需要 250 毫秒才能将平面文件解析为 bean。

要求:简单字符串必须转换为单个 bean(嵌套和转换)

听说单义性在这里可以做得更好 - 并尝试使用以下设置。

FixedWidthParserSettings 设置 = 新 FixedWidthParserSettings();

    settings.getFormat().setLineSeparator("\n");
    settings.setRecordEndsOnNewline(false);
    settings.setHeaderExtractionEnabled(false);
    settings.setIgnoreLeadingWhitespaces(false);
    settings.setIgnoreTrailingWhitespaces(false);
    settings.setMaxColumns(100);
    settings.setMaxCharsPerColumn(100);
    settings.setNumberOfRecordsToRead(1);
    settings.setReadInputOnSeparateThread(false);
    settings.setInputBufferSize(10*1024);
    settings.setLineSeparatorDetectionEnabled(false);
    settings.setColumnReorderingEnabled(false);

使用 jmeter 运行时,有 200 个并行线程 - 平均花费时间为 10 毫秒(解析和转换大约 10 个字段,在实际用例中,我们必须对大约 500 个字段进行相同的处理)

但是当我们将其增加到 300 或 350 个并行线程时,平均时间约为 300 毫秒。但是我们的总 SLA 大约是 10 毫秒。

非常感谢这里的任何帮助!

标签: string-parsingflat-fileunivocity

解决方案


可能您的 JVM 内存不足。尝试使用-Xms-Xmx标志增加它。如果您没有足够的可用内核,太多线程也无济于事。


推荐阅读