PHP执行程序处理简单的3管grep非常慢


PHP exec very slow processing simple 3-pipe grep

我读过这里,无法真正理解如何加快我的简单exec(),它基本上看起来是这样的:

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

我已经在PHP文档的顶部添加了ini_set('memory_limit', 256);,但该脚本仍然需要大约1分钟的运行时间(与Penguinet中几乎即时完成的脚本形成对比)。我能做些什么来改进它?

我会尝试以下方法:

把你的执行官改为只运行一些更简单的东西,比如

echo Hello

看看它是否还需要这么长时间——如果需要,问题就出在流程创建和执行()区域。

如果运行速度很快,请尝试将exec更改为以下内容:

zcat access_log.201312011745.gz > /dev/null

看看是不是"zcat"减慢了的速度

考虑用一个"sed"替换greps,一旦它找到你想要的东西,它就会退出(使用"q"),而不是一直持续到文件的末尾——因为(通过你的"头脑")你似乎只对字符串的前几次而不是所有出现感兴趣。例如,您似乎在寻找包含"id=6"answers"id2=10"的行,因此,如果您像下面这样使用"sed",它可能会更快,因为"sed"会打印它,并在找到一条后面跟着"id2=0"的行时立即停止

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

"-n"表示"一般情况下不要打印",然后它会查找"id=2",后面跟着任何字符,然后是"id2=10"。如果它发现了,它会打印这一行,"q"使它立即退出,而不查看文件的末尾。请注意,我假设"id=2"在行中位于"id2=10"之前。如果这不是真的,"sed"将需要额外的工作。