获取进程资源使用信息的最佳方法?

获取进程资源使用信息的最佳方法?

监视某些正在运行的进程的资源使用情况的最佳方法是什么?例如,如果我想生成一段时间内 CPU 和内存使用情况的日志文件。

据我了解,有各种不同的选项,例如使用 top 或 ps 命令、在代码中使用 sysInfo 命令或直接查询 /proc/ 目录中的文件。尽管某些方法的优点和缺点对我来说是显而易见的(例如 ps 显示平均 CPU 使用率,而 top 更即时。虽然这问题指出 top 也存在一些问题),我对 Linux 还是新手,所以我觉得很容易忽视某些东西并导致灾难。

另外,直接查询 /proc/ 文件而不是使用 top,ps 或调用 sysInfo 是否更好,或者不建议使用这种方法?

答案1

这个问题特别是有很多相关答案这个

这也可以使用 watch 轻松完成,无需使用任何脚本。

watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a 日志文件"

但是您将使用“ps -up PID”(查看特定进程 ID 的资源使用情况)而不是该答案中提到的“ps -auxww | grep 'pattern' | wc -l”。

您还可以更改“watch -t -n XX”后的 XX 数字,以使 watch 命令刷新更快或更慢(watch -n0,5 = 每半秒刷新一次;watch -n10 = 每 10 秒刷新一次)

答案2

当然,这完全取决于您感兴趣的数据是什么以及您想要它的原因(有一种简单的方法可以同时观察许多事情,以获得初级调试/调整目的的近似结果与. 对有限数量的值进行精确基准测试。)

常见的实用程序,例如 top、htop…对于前一个需求来说就很好了。
但是运行任何预制的通用工具都会或多或少地对系统产生扰动。这意味着如果应用程序未运行,实际结果将会有所不同。
举个例子,如果您使用顶部为了观察正在运行线程的 cpu,您会注意到频繁的更改,如果 top 未运行,则发生的数量要少得多。

对于后者的需要,你当然不希望那样。为此目的(精确的基准测试)你得到的想法(“直接查询/proc/即可”)确实是有钱能买到的最好的东西。

A/man proc为了在 /proc 目录树中找到包含您感兴趣的信息的文件(越少越好)
B/ 有一个简单的 shell 脚本:

  1. 将这些文件添加到某个 /tmp 文件(不要 grep)
  2. 睡一段时间(越高越好)
  3. 再次捕获这些文件,将结果附加到 /tmp 文件

C/ 首先启动典型的工作负载,然后从任何控制台启动脚本。
D/ 在任何电子表格中导入 /tmp 文件,然后……摆弄你的微积分。

当然,如果您只有几十个 cpu,并且有独立的 cpu0 进行内务管理,最好的办法是将您的控制台固定到该 cpu。

相关内容