linux - Grep资源使用

标签 linux bash memory grep zgrep

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

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

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

如果有人可以解释在运行这些命令时内存使用情况是如何工作的,那将会有很大帮助。

最佳答案

grep 内存使用量是恒定的;它不随文件大小变化。它不需要将整个文件保存在内存中,只需保存它正在搜索的区域。

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

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


† 小心扫描 files with incredibly long lines , 尽管。它的内存使用量确实随行长度而变化。您可以使用 grep -I 跳过二进制文件,这通常就足够了。

关于linux - Grep资源使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716987/

相关文章:

c - 打开不带扩展名的文件

linux - 我有一个文件,我想将其与另一个目录中的所有文件进行比较,以查找哪个文件是相同的

bash - 使用 curl 下载文件并通过 sha1sum 将其通过管道传输到 tar

java - 尽管有足够的可用内存,但巨大的数组仍会导致内存不足

C: 使用带++/-- 的指针更新内存地址内容

c - 指针 + int 与点 - int

linux - 使用 Bash 脚本从 xdotool 搜索结果中检索单个元素

linux - 需要 libusb 基本示例

linux - cron 作业部分运行

node.js - 使用 Nodejs 更改 bash 终端的当前工作目录