我使用cat
管道将不同的文件合并到一个大文件中。不同文件的数量各不相同,从两个文件到十个文件不等,但所有文件的总大小始终相同(几 GB)。
我的问题:每当我总共有六个文件时,连接它们所需的时间峰(即明显多于五个或七个),但我不知道为什么。
有人有想法吗?
文件(大小均相同)
output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5
命令
cat outputTEMP* >> output && rm -f outputTEMP*
目前,机器必须执行一些计算,但当有新的测量值时,我会稍后更新。
答案1
调试该问题的一种方法是使用 strace。
strace -tt -e trace=open,close -o /tmp/strace.cat.log cat apt.list authors.txt >/tmp/t.test
cat /tmp/strace.cat.log
23:12:08.022588 open("apt.list", O_RDONLY|O_LARGEFILE) = 3
23:12:08.023451 close(3) = 0
23:12:08.023717 open("authors.txt", O_RDONLY|O_LARGEFILE) = 3
23:12:08.025403 close(3) = 0
-tt 选项以毫秒为单位记录系统调用的时间戳。-e trace=open,close 仅记录 open、close API。尝试删除它们,您将看到一个非常嘈杂的日志文件。
答案2
所以 Davides 的评论是正确的。为了做出准确的评估,我们需要做两件事:
- 保证缓存不属于该场景的一部分
- 实际测量所花费的时间。
假设您有磁盘空间,我将描述一个测试场景,以更准确地确定这是否是一个真正的问题。如果是,这种方法的支持证据将帮助开发人员知道它是真实的,并能够重现它。
为了帮助问题隔离,我们在这里根本不做 rm 部分。之后让 TEMP 文件闲置。如果您愿意,您可以稍后重复执行“rm”部分的测试。
测试场景如下:
- 创建 9 个目录 - 每个目录对应一个文件数量( 2 3 4 5 6 7 8 9 和 10) - 如果您没有空间,也许只创建 2、5、6、7 和 10。
- 确保将不同的文件放入每个目录中;任何地方都不要有重复
使用如下时间命令:
时间(cat outputTEMP* >> 输出)
捕获您运行的每个测试所报告的实际数字、用户数字和系统数字。
我同意雷诺兹的观点;如果这是真的,你一定要把详细信息发邮件给[电子邮件保护]。