6

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

有没有办法在不影响系统性能的情况下做到这一点,而且在同一个脚本中也是如此?我发现了许多可以在我们正在运行的脚本之外(独立)执行的示例;但不是我们可以在同一个脚本中做的。

4

2 回答 2

2

如果您正在寻找动态捕获整个 linux 机器的 CPU 和 Mem 利用率,那么以下命令也可以帮助您:

中央处理器

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用于 mem stats 收集

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

然后10是间隔数(在本例中将有 10 次迭代)

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

最后,转储&继续

于 2019-02-09T08:10:04.450 回答
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
于 2009-04-30T13:24:32.620 回答