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

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

有帮助吗?

解决方案

我建议使用' 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

其他提示

如果您正在寻找动态捕获整个Linux机箱的CPU和内存使用率,那么以下命令也可以帮助您:

<强> CPU

vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now 
free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now <*>}'> DataDumpMemoryfile.csv &
}'> CPUDataDump.csv &

vmstat 用于收集CPU计数器

-n 表示延迟值,在这种情况下是15,这意味着每15秒后,将收集统计数据。

然后 10 是间隔的数量,在这个例子中将有10次迭代

awk'{now = strftime(&quot;%Y-%m-%d%T&quot;);现在打印$ 0}'这将转储每次迭代的时间戳

最后,带有&amp; 的转储文件用于继续

<强>内存

<*>

free 用于mem stats collection

-m 这是针对mem的单位(你可以使用 -b 表示字节, -k 表示千字节, - g (千兆字节)

然后 10 是间隔的数量(在这个例子中会有10次迭代)

awk'{now = strftime(&quot;%Y-%m-%d%T&quot;);现在打印$ 0}'这将转储每次迭代的时间戳

最后,转储&amp; 继续

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top