2017-10-12 144 views
4

我的任务是编写一个shell脚本,通过Linux和Solaris服务器上多个目录中的数百个日志文件来grep。一些日志以多种格式压缩,一些日志大小只有几GB。我很担心grep会在服务器上使用大量资源,并可能通过耗尽内存来关闭机器上运行的Web服务器(如果这可能会发生)。Grep资源使用情况

我应该解压缩文件,grep他们,然后再压缩它们或使用zgrep(或等效)在压缩时搜索它们?在另一种方法中使用一种方法会有明智的资源优势吗?

另外,有没有一种简单的方法来限制命令的内存使用量为当前可用的百分比?

如果有人能够解释在运行这些命令时内存使用情况是如何工作的,那么它会帮助很多。

回答

4

grep内存使用量不变;它不会按照文件大小进行缩放。它不需要将整个文件保存在内存中,只需要保存它正在搜索的区域。

解压缩类似。内存使用量与字典大小成正比,而不是与文件总大小成正比。字典大小无需担心:最多几兆字节。

我不担心一些简单的grep/zgrep/zcat | grep搜索取消其他进程。这是Linux的面包和黄油。


†通过files with incredibly long lines扫描当心,虽然。其内存使用量会随着行长度而缩放。您可以使用grep -I跳过二进制文件,这通常就足够了。

+0

也不要用'-f'指定一个大型的模式文件。可能不会帮助。 – stevesliva

相关问题