【问题标题】:Performance of sort command in unixunix 中 sort 命令的性能
【发布时间】:2011-06-03 10:24:44
【问题描述】:

我正在为我的公司编写一个自定义 apache 日志解析器,但我发现了一个我无法解释的性能问题。我有一个大小为 1.2GB 的文本文件 log.txt。

命令:sort log.txt 比命令:cat log.txt 慢 3 秒 |排序

有人知道为什么会这样吗?

【问题讨论】:

  • 是否因为日志文件在此期间增长而导致通话时间比另一个通话时间长?
  • 没有。我处理文件的本地副本。
  • 是不是因为第二次尝试(cat|sort)log.txt 是从缓存而不是磁盘读取的,所以您保存在磁盘访问上,而不是实际排序?请通过 strace -C 运行您的排序,看看有多少时间用于磁盘访问。或者只是将文件放在 ramdisk 上并在那里运行您的实验。
  • 如果它是 1.2 GB,不妨试试这个:LC_ALL=C sort log.txt LC_COLLATE=C 也可能有帮助。

标签: linux unix sorting pipe


【解决方案1】:

cat file | sortUseless Use of Cat

cat 的目的是连接 (或“连接”)文件。如果只是 一个文件,将其与 没有什么是浪费时间,而且 花费你一个过程。

应该不会花更长的时间。你确定你的时间安排对了吗?

请张贴输出:

time sort file

time cat file | sort

您需要多次运行命令并获得平均值。

【讨论】:

  • 你完全正确!谢谢!我只检查 time 命令的单个输出。当运行 5 次并取平均值时,没有 cat 的版本似乎快了大约 2 秒!也非常感谢链接!
  • @user744734:在取平均值之前,您应该丢弃异常值,在这种情况下,至少是预热缓存的运行。
【解决方案2】:

与其担心sort 的性能,不如更改日志记录:

  • 消除日志中不必要的冗长输出。
  • 定期滚动日志(基于日期或大小)。
  • ...修复输出到日志的错误。 ;)

另外,你确定 cat 正在读取整个文件吗?它可能有一个读取缓冲区等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 2014-08-06
    • 2015-09-21
    • 2023-03-31
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多