Grep资源使用
Grep resource usage
我的任务是编写一个 shell 脚本来 grep 遍历 Linux 和 Solaris 服务器上许多目录中的数百个日志文件。一些日志以多种格式压缩,一些日志的大小为几 GB。我担心 grep 在服务器上使用大量资源,并可能通过耗尽内存来关闭机器上 运行 的 Web 服务器(如果这可能发生的话)。
我应该解压缩文件,grep它们然后再次压缩它们还是使用zgrep(或等效的)在压缩时搜索它们?使用一种方法比另一种方法有资源优势吗?
此外,是否有一种简单的方法可以将命令的内存使用限制为当前可用内存的百分比?
如果有人可以解释 运行 这些命令时内存使用的工作原理,那将大有帮助。
grep
内存占用不变;它不随文件大小 † 缩放。它不需要将整个文件保存在内存中,只需要保存它正在搜索的区域。
解压类似。内存使用量与字典大小成正比,而不是与文件总大小成正比。字典大小不用担心:最多几兆。
我不会担心一些简单的 grep
/ zgrep
/ zcat | grep
搜索会关闭其他进程。这些东西是 Linux 的面包和黄油。
† 不过要小心扫描 files with incredibly long lines。它的内存使用量确实随行长度而变化。您可以使用 grep -I
跳过二进制文件,这通常就足够了。
我的任务是编写一个 shell 脚本来 grep 遍历 Linux 和 Solaris 服务器上许多目录中的数百个日志文件。一些日志以多种格式压缩,一些日志的大小为几 GB。我担心 grep 在服务器上使用大量资源,并可能通过耗尽内存来关闭机器上 运行 的 Web 服务器(如果这可能发生的话)。
我应该解压缩文件,grep它们然后再次压缩它们还是使用zgrep(或等效的)在压缩时搜索它们?使用一种方法比另一种方法有资源优势吗?
此外,是否有一种简单的方法可以将命令的内存使用限制为当前可用内存的百分比?
如果有人可以解释 运行 这些命令时内存使用的工作原理,那将大有帮助。
grep
内存占用不变;它不随文件大小 † 缩放。它不需要将整个文件保存在内存中,只需要保存它正在搜索的区域。
解压类似。内存使用量与字典大小成正比,而不是与文件总大小成正比。字典大小不用担心:最多几兆。
我不会担心一些简单的 grep
/ zgrep
/ zcat | grep
搜索会关闭其他进程。这些东西是 Linux 的面包和黄油。
† 不过要小心扫描 files with incredibly long lines。它的内存使用量确实随行长度而变化。您可以使用 grep -I
跳过二进制文件,这通常就足够了。