为什么“less”在文件大小合理、磁盘速度快和内存充足的情况下会消耗如此多的 CPU?

为什么“less”在文件大小合理、磁盘速度快和内存充足的情况下会消耗如此多的 CPU?

我正在阅读的文件之一似乎存在病态情况less。该文件大小约为 300MB,磁盘速度很快(本地 NMVE),并且该文件可以轻松地放入内存中,没有交换或类似的情况。

less --version给我

less 563 (PCRE regular expressions)

在 Arch Linux 上。我在没有命令行参数的情况下运行( no-R-S)。我正在读取的文件正在被写入。

用法: 我注意到使用follow(按F)对于此文件来说通常很慢,但可行。如果follow在进行过程中激活搜索(用于突出显示),事情会变得更糟。现在,如果我搜索以下内容:(something|something-else).*|.*warn然后点击F (follow),它就会完全停止。我需要从另一个终端杀死它。

我一直在使用这样的正则表达式来处理更大的文件,没有任何问题。会不会出了什么问题?

编辑:更准确的步骤和信息:

  • 发生在 50MB 文件中,无需长行
  • 另一个进程每 15 秒向文件添加一次内容

脚步:

  • 我打开文件,转到末尾(Shift+g)
  • 搜索(something|something-else).*|.*warnPattern not found在最后说)
  • follow (Shift+f) -> CPU 达到 100% 并且似乎永远不会停止
  • 如果我在搜索后按向上箭头,而不是按 Shift+f,也会发生同样的情况
  • 如果我将正则表达式减少到其一部分((something|something-else).*或者.*warn操作需要几秒钟,仍然很慢但可以管理
  • htop中常驻内存显示为400MB
  • Ctrl+C 无法中断它,需要从外部杀死

相关内容