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

标签 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 中几乎立即完成)。我可以做些什么来改进它?

最佳答案

我会尝试以下一些方法:

更改您的执行程序以仅运行一些简单的内容,例如

echo Hello

看看是否仍然需要这么长时间 - 如果需要,则问题出在进程创建和 exec() 区域。

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

zcat access_log.201312011745.gz > /dev/null

看看是否是“zcat”拖慢了你的速度

考虑用“sed”替换 grep,一旦找到您要查找的内容,它就会退出(使用“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”将需要额外的工作。

关于PHP exec 处理简单的 3 管道 grep 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20379844/

相关文章:

php - mysql获取给定列属性的行

linux - 删除重复项并首先保留在 unix 中的 csv 文件中

linux - 弹性beantalk ssh - 多用户

java 数组双端队列大小与性能

javascript - boomerang vc导航定时页面加载时间RT插件中timeDone的区别

sql - FORALL 与 FOR 批量更新

php - 从 PHP 运行 shell 命令 - 使用 root 权限或 sudo

php - 在mamp上安装frapi?

php - 将 JSON 对象发布到 Symfony 2

linux - STAG 和命令行有什么区别?