Java文件i / o吞吐量下降
发布时间:2020-12-15 08:34:30 所属栏目:Java 来源:网络整理
导读:我有一个程序,其中每个线程一次从文件中读取多行文件,处理行,并将行写入不同的文件.四个线程分割要在其中处理的文件列表.我在两种情况下遇到了奇怪的性能问题: 四个文件,每个文件50,000行 吞吐量从700线/秒开始处理,下降到~100线/秒 30,000个文件,每个12行
我有一个程序,其中每个线程一次从文件中读取多行文件,处理行,并将行写入不同的文件.四个线程分割要在其中处理的文件列表.我在两种情况下遇到了奇怪的性能问题:
>四个文件,每个文件50,000行 >吞吐量从700线/秒开始处理,下降到~100线/秒 > 30,000个文件,每个12行 >吞吐量从800线/秒开始并保持稳定 这是我正在处理的内部软件,所以遗憾的是我无法共享任何源代码,但该程序的主要步骤是: >拆分四个工作线程中的文件列表 我不明白的是为什么每行12行的30k文件比一些多行文件的性能更高.我本以为打开和关闭文件的开销要大于读取单个文件的开销.此外,前一案件的表现下降具有指数性质. 我已将最大堆大小设置为1024 MB,并且最多使用100 MB,因此过载的GC不是问题.你还有其他建议吗? 解决方法
根据你的数字,我猜GC可能不是问题.我怀疑这是磁盘的正常行为,由许多并发线程操作.当文件很大时,磁盘必须多次在线程之间切换上下文(产生重要的磁盘
seek time),并且开销很明显.对于小文件,可能它们被读作单个块而没有额外的寻道时间,因此线程不会相互干扰太多.
使用单个标准磁盘时,串行IO通常比并行IO更好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |