我正在运行一个shell脚本来执行一个C++应用程序,该应用程序测量API的性能。我可以捕获API的延迟(在给定参数集合下返回值所需的时间),但我也希望在5-10秒的间隔内捕获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 &
来继续进行操作
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