PHP exec处理简单的3管道grep非常慢

时间:2013-12-04 15:51:57

标签: php linux performance grep

我已阅读here并且无法真正了解如何加快我的简单exec(),这基本上是这样的:

 zcat access_log.201312011745.gz | grep 'id=6' | grep 'id2=10' | head -n10 

我已将ini_set('memory_limit', 256);添加到PHP文档的顶部,但脚本仍然需要大约1分钟才能运行(与Penguinet中的近乎即时完成相比)。我该怎么做才能改善它?

1 个答案:

答案 0 :(得分:0)

我会尝试以下一些方法:

将你的exec改为简单地运行somethig,比如

echo Hello

并查看它是否还需要这么长时间 - 如果确实如此,问题出在进程创建和exec()区域。

如果运行得很快,请尝试将exec更改为:

zcat access_log.201312011745.gz > /dev/null

看看是否是“zcat”让你失望

考虑用“sed”替换greps,一旦找到你想要的东西就退出(使用“q”)而不是一直到文件结尾 - 因为看起来(由你的“头”) “)你只对前几个感兴趣,而不是所有出现的字符串。例如,你似乎在寻找包含“id = 6”和“id2 = 10”的行,所以如果你使用下面的“sed”,它可能会更快,因为“sed”将打印它并立即停止它找到一行“id = 6”后跟“id2 = 10”

zcat access_log.201312011745.gz | sed -n '/id=2.*id2=10/p;q'

“-n”表示“一般不打印”,然后查找“id = 2”,后跟任何字符,然后“id2 = 10”。如果它发现,它打印该行,“q”使其立即退出而不查看文件结尾。请注意,我假设“id = 2”出现在“id2 = 10”之前。如果不是这样,“sed”将需要额外的工作。