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

时间:2009-04-30 13:13:08

标签: c++ performance shell memory-management cpu-usage

我正在运行一个shell脚本来执行一个c ++应用程序,它测量api的性能。我可以捕获api的延迟(返回给定参数集的值所花费的时间),但我也希望以5-10秒的间隔捕获cpu和内存使用情况。

有没有办法在不影响系统性能的情况下执行此操作,并且在同一个脚本中也是如此?我找到了许多例子,可以在外面(独立地)执行我们正在运行的脚本;但不是我们可以在同一个剧本中做的事情。

2 个答案:

答案 0 :(得分: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}'这将转储每次迭代的时间戳

最后,转储&用于继续

答案 1 :(得分: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