动态捕获CPU和内存使用情况

6
我正在运行一个shell脚本来执行一个C++应用程序,该应用程序测量API的性能。我可以捕获API的延迟(在给定参数集合下返回值所需的时间),但我也希望在5-10秒的间隔内捕获CPU和内存使用情况。是否有一种方法可以在不太影响系统性能的情况下在同一脚本中完成这个任务?我找到了许多例子,可以在脚本之外(独立于脚本)完成这个任务,但没有一个可以在同一脚本中完成的例子。

可能是 [如何在Linux(Ubuntu)上获取单个进程的CPU使用率和内存使用率?] 的重复问题 (https://dev59.com/5nM_5IYBdhLWcg3wzmgw) - Ciro Santilli OurBigBook.com
2
@CiroSantilli,那个问题是在这个问题之后提出的,会成为重复问题,而不是这个问题 :-) - gagneet
http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even-though-its-much-newer-and-ha ;-) (注:这是一个链接,无法翻译成中文) - Ciro Santilli OurBigBook.com
2个回答

2
如果您想动态地捕获整个Linux系统的CPU和内存利用率,那么下面的命令也可以帮助您: CPU:最初的回答
vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> CPUDataDump.csv &

vmstat 用于收集CPU计数器

-n 表示延迟值,本例中为15,这意味着每15秒收集一次统计信息。

然后 10 是间隔的数量,在此示例中将进行10次迭代。

awk '{now=strftime("%Y-%m-%d %T "); print now $0}' 这将转储每个迭代的时间戳。

最后,使用 & 的转储文件以进行连续操作。

内存

free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> DataDumpMemoryfile.csv &

free 用于收集内存统计信息

-m 表示内存单位(您可以使用 -b 表示字节,-k 表示千字节,-g 表示千兆字节)

10 表示间隔次数(在本例中会有10个迭代)

awk'{now=strftime("%Y-%m-%d %T "); print now $0}' 这将转储每个迭代的时间戳

最后,使用 dump & 来继续进行操作


注:原始答案被翻译为“最初的回答”。

1
我建议使用'time'命令和'vmstat'命令。第一个命令将给出可执行文件执行的CPU使用情况,而第二个命令则是系统的周期性(即每秒一次)CPU/内存/IO转储。
例如:
time dd if=/dev/zero bs=1K of=/dev/null count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 0.738194 seconds, 1.4 GB/s
0.218u 0.519s 0:00.73 98.6%     0+0k 0+0io 0pf+0w <== that's time result

你能提供一个例子吗?我在shell中尝试了相同的操作,但它期望进程结束,而我在同一脚本中写了多个调用实例...这些实例是依次写在一行中的。 - gagneet
我添加了一个示例,我认为您需要手动收集输出并进行求和。另一个建议是将所有运行放在一个脚本中,并对其进行“时间”处理。 - Drakosha

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