如何在Linux中监视进程的CPU、内存和时间

9

我该如何在Linux中对一个进程进行基准测试?我需要像“top”和“time”结合在一起的东西来针对特定进程名称进行测试(它是一个多进程程序,因此会给出许多PIDs)?

此外,我想要随时间绘制这些进程的内存和CPU使用情况图表,而不仅仅是最终数字。

有任何想法吗?

2个回答

12

我通常会编写一个简单的脚本来完成这种工作。

查看内核文档中有关proc文件系统的相关信息(在Google搜索“linux proc.txt”)。

/proc/stat文件的第一行(proc.txt的1.8节)将为您提供累积CPU使用情况统计信息(例如用户、优先级、系统、空闲等)。对于每个进程,文件/proc/$PID/stat(proc.txt的表1-4)将为您提供特定进程的CPU使用情况和内存使用情况统计信息(请参见rss)。

如果您进行谷歌搜索,您会发现大量关于这些文件的详细信息,以及获取/推导所需值的库/应用程序/代码片段的指针。考虑到这一点,我将重点介绍高级策略。

对于CPU统计信息,请使用您喜欢的脚本语言创建一个可执行文件,用于监视一组进程ID。在固定间隔(例如1秒)内轮询/计算每个进程和整个系统的累积总数。在每个轮询间隔期间,将所有结果写入单行并输出到stdout。

对于内存统计信息,请编写类似的脚本,但仅记录每个进程的内存使用情况。内存稍微容易一些,因为我们可以直接获取瞬时值。

在测试期间运行这些脚本,传递您要监视的进程ID集并将其输出重定向到日志文件。

./logcpu $(pidof foo) $(pidof bar) > cpustats
./logmem $(pidof foo) $(pidof bar) > memstats

将这些文件的内容导入电子表格中(对于某些应用程序,这只需要复制/粘贴即可)。对于CPU,您需要实时值而不是累积值,因此您需要进行一些小的电子表格工作来推导这些值(这只是差值't(x + 1)-t(x)')。当然,您可以让CPU记录器写入差值,但您需要在脚本上花费更多时间。
最后,使用电子表格生成漂亮的图表。

很高兴看到/proc/$PID包含了所有这些监控数据。 - Paul

7
以下是监视Linux系统的工具:
  1. 系统命令,如topfree -mvmstatiostatiotopsarnetstat等。当您在调试问题时,没有任何其他工具比这些Linux实用程序更好。这些命令可以为您提供一个清晰的图像,了解服务器内部发生的情况。
  2. SeaLion:代理执行 #1 中提到的所有命令(也包括用户定义的命令),并可以在美观的Web界面中访问这些命令的输出结果。当您需要在数百个服务器上进行调试时,这个工具非常方便,因为安装非常简单。而且它是免费的。
  3. Nagios:它是所有监视/警报工具中的“母亲级”存在。虽然非常可定制化,但对于初学者来说很难设置。有一组名为Nagios插件的工具,涵盖了几乎所有重要的Linux度量指标。
  4. Munin
  5. Server Density:一个基于云的付费服务,收集重要的Linux度量指标,并使用户能够编写自己的插件。
  6. New Relic:另一个知名的托管监视服务。
  7. Zabbix

MMonit是必须的。单个Monit是免费的,集群MMonit是付费的。 - m3nda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接