7

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

我应该解压缩文件,grep 它们然后再次压缩它们还是使用 zgrep (或等效)在压缩时搜索它们?使用一种方法比另一种方法更有优势吗?

此外,是否有一种简单的方法可以将命令的内存使用限制为当前可用内存的百分比?

如果有人可以解释运行这些命令时内存使用的工作原理,那将有很大帮助。

4

1 回答 1

7

grep内存使用是恒定的;它不随文件大小扩展†</sup>。它不需要将整个文件保存在内存中,只需要它正在搜索的区域。

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

我不会担心一些简单的grep//搜索会影响其他进程zgrepzcat | grep这些东西是 Linux 的生计。


† 不过,请注意扫描具有令人难以置信的长行的文件。它的内存使用量确实随行长而变化。您可以使用grep -I跳过二进制文件,这通常就足够了。

于 2017-10-12T19:03:30.627 回答