我正在运行一个shell脚本来执行一个c ++应用程序,它测量api的性能。我可以捕获api的延迟(返回给定参数集的值所花费的时间),但我也希望以5-10秒的间隔捕获cpu和内存使用情况。
有没有办法在不影响系统性能的情况下执行此操作,并且在同一个脚本中也是如此?我找到了许多例子,可以在外面(独立地)执行我们正在运行的脚本;但不是我们可以在同一个剧本中做的事情。
答案 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