egrep:CPU 和内存使用情况

egrep:CPU 和内存使用情况

我的 Linux 机器有 16 个处理器和 70 GB 的可用内存,但是当我运行egrep命令时,该命令使用(通过命令检查top)100% 的 CPU 和 0.5 的内存:

22391 aime      25   0 22.5g 337m  880 R 100.1  0.5   1094:06 egrep

这意味着 16 个 CPU 中只有 1 个被使用。

我怎样才能提高这里的性能或使用egrep更多的 CPU?

我实际上是grep在目录结构中进行 ping 操作,其数据大小为 40 GB。

近似的正则表达式是:

egrep -H -i -R -a -o -n ([[:alnum:]_\.]+@[[:alnum:]_\.]*(xyz|abc)\.com) <dir>

另外,由于我通过 Perl 脚本运行该命令,ForkManager 能在这方面帮助我吗?

谢谢

答案1

CPU 利用率问题根源在于线程。egrep = 1 线程 => 1 CPU。如果您想使用更多 CPU,则需要将任务拆分为 16 个较小的任务。我建议将数据分成 16 个块,并在每个块上运行一个 egrep,并确保每个块分配给不同的 CPU。

答案2

思路:

  • 如果您正在使用 Perl 脚本,为什么不使用 Perl 进行匹配?
  • 通过 shell 脚本,find加上GNU并行(或者,正如 Schwern 所写)是并行应用于输入文件的xargs -P最明显方式;它们显然也可以从 Perl 中调用,或者您可以使用 Perl 等效项(例如egrep文件::查找)。
  • 您可以通过管道 grep 进行并行化:第一个进行非常快速、简单的预过滤,下一个进行精确、昂贵的匹配 - 但这种方法是否可以节省您的时间取决于您需要匹配的内容以及我不熟悉的 egrep 实现细节。

相关内容