【发布时间】:2014-11-29 21:04:42
【问题描述】:
我有一个反复出现的问题,我需要在日志文件中搜索与某个模式匹配的所有线程。例如以下
(线程a)blah blah (线程 b) blha (thread a) match blah (线程 c)等等等等 (线程 d)等等匹配 (线程 a)xxx将从线程 a & d 生成所有行
有多个日志文件(压缩)。多个是数百或数千。每个未压缩文件最多可达 20MB。
我现在这样做的方法是首先在所有文件中grep“匹配”,将(线程x)部分切割成一个排序/uniq文件,然后在文件上使用fgrep与原始日志集上的匹配线程。
我已经在并行化初始 grep 和最终 grep。但是,这仍然很慢。
有没有办法提高这个工作负载的性能? (我虽然是hadoop,但它需要太多的资源来设置/实现)
这是整个过程的脚本。
#!/bin/bash 文件=/tmp/thg.$$ PAT=1 美元 转移 陷阱“rm -f $文件”3 13 pargrep "$PAT" $@ | awk '{ 打印 $6 }' | sed 's/(\(.*\)):/\1/' |排序 |唯一的>$文件 pargrep --fgrep $FILE $@ rm -f $文件并行 grep 是一个更长的脚本,它管理一个最多包含 N 个处理 M 个文件的 grep 进程的队列。每个 grep 进程都会生成一个中间文件(在 /dev/shm 或 /tmp - 一些内存文件系统中),然后在队列从任务中耗尽时将其连接起来。
今天我的工作站在一组约 3000 个文件上运行超过 24 小时后,我不得不重新启动它。我猜双 xeon 8GB 和 16GB 交换不适合这样的工作负载:-)
【问题讨论】:
-
您如何准确地并行化初始搜索?也许向我们展示您的各个阶段的代码...