string-parsing - 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 毫秒。
非常感谢这里的任何帮助!
解决方案
可能您的 JVM 内存不足。尝试使用-Xms
和-Xmx
标志增加它。如果您没有足够的可用内核,太多线程也无济于事。
推荐阅读
- mysql - 使用 MySQL 按他们出演的电影类型列出演员
- clickonce - clickonce 自定义包的引导程序未正确计算安装条件
- python - 在 Django 模板中渲染破折号
- declaration - 在另一个过程中调用一个过程,该过程在它之前声明
- android - 为什么我们不能在滚动视图中直接添加多个视图?
- java - 在 CompletableFuture 上同步使用 acceptEither 进行任务调度
- database - 时间表系统用例图
- security - “unsafe.Pointer(&x)”调用不安全吗?
- image - SwiftUI 图像系统比其包含的堆栈更大?
- php - 为 php 内置的 web 服务器设置本地证书