2017-10-12 71 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

相關問題