【问题标题】:grep command hogs the whole cpugrep 命令占用整个 CPU
【发布时间】:2021-02-17 03:36:14
【问题描述】:

我正在尝试从包含特定字符串的文件夹中查找所有文件。不幸的是,看起来我做错了什么,因为这占用了整个 CPU。我正在运行 Ubuntu。有人可以请教吗?

这是我运行的命令:find /var/logs/ -xdev -type f | xargs grep -i "ID59103"

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13944 root      20   0  101m 1128  720 R 100.0  0.0   9:26.37 grep
 2793 root      20   0  523m 128m 1012 S  2.7  0.8   8259:23 sw-collectd
   98 root      20   0     0    0    0 S  0.3  0.0   0:04.19 kswapd0

目录 /var/logs/ 有大约 130k 个文件。

谢谢

【问题讨论】:

    标签: linux grep find


    【解决方案1】:

    感谢您的回答。不,这不是错字,因为我不是要查看 /var/log/ 日志,而是查看我放入 /var/logs/ 的一些旧日志。

    也许值得一提的是,该目录中有大约 130k 个文件(我将在问题中更新此信息)。

    您给我的命令似乎运行得更好,但仍占用 70% 的 CPU。

    【讨论】:

    • 为什么 70% 的数字让您感到惊讶?大部分数据在 RAM 中,然后grep 受 CPU 限制。见linuxatemyram.com
    【解决方案2】:

    我正在尝试从包含特定字符串的文件夹中查找所有文件。

    仔细阅读grep(1)并尝试运行grep --help

    你可能想跑

    grep -rn ID59103 /var/logs/
    

    顺便说一句,/var/logs/ 可能是一个错字。也许你想要/var/log/

    另请阅读 GNU grepGNU findutilsGNU bash 的文档。

    所有这些都是free software。您可以下载他们的源代码,研究该源代码并改进每个源代码以满足您的需求。

    目录 /var/logs/ 有大约 130k 个文件。

    实际上,grep 经常利用page cache,因此可能会占用大量 CPU。有关说明,请参阅Linux Ate My RAM

    【讨论】:

    • 在阅读了 5 次这样的手册后,我终于明白了。谢谢。这可以关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多