我正在运行一个 shell 脚本来执行一个 c++ 应用程序,它可以测量 api 的性能。我可以捕获 api 的延迟(返回给定参数集的值所花费的时间),但我也希望以 5-10 秒的间隔捕获 CPU 和内存使用情况。
有没有办法在不影响系统性能的情况下做到这一点,而且在同一个脚本中也是如此?我发现了许多可以在我们正在运行的脚本之外(独立)执行的示例;但不是我们可以在同一个脚本中做的。
我正在运行一个 shell 脚本来执行一个 c++ 应用程序,它可以测量 api 的性能。我可以捕获 api 的延迟(返回给定参数集的值所花费的时间),但我也希望以 5-10 秒的间隔捕获 CPU 和内存使用情况。
有没有办法在不影响系统性能的情况下做到这一点,而且在同一个脚本中也是如此?我发现了许多可以在我们正在运行的脚本之外(独立)执行的示例;但不是我们可以在同一个脚本中做的。
如果您正在寻找动态捕获整个 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}'
这将转储每次迭代的时间戳
最后,转储&
继续
我建议使用 ' 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