动态捕获CPU和内存使用情况

15 浏览
0 Comments

动态捕获CPU和内存使用情况

我正在运行一个Shell脚本来执行一个C++应用程序,该应用程序测量一个API的性能。我可以捕获API的延迟(返回给定参数值所需的时间),但我还希望每隔5-10秒捕获CPU和内存使用情况。\n有没有一种方法可以在不太影响系统性能的情况下,在同一个脚本中完成这个任务?我找到了许多例子,可以在我们运行的脚本之外(独立于脚本)完成这个任务,但没有一个可以在同一个脚本中完成的例子。

0
0 Comments

原因:需要动态地捕获CPU和内存的使用情况。

解决方法:建议使用"time"命令来获取可执行文件的CPU使用情况,并使用"vmstat"命令来定期(每秒一次)获取系统的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 <== 这是time命令的输出结果

如果需要在同一个脚本中运行多个实例,可以将所有运行放在一个脚本中,并对其进行"time"处理。

以上是问题出现的原因及解决方法。

0
0 Comments

问题的出现原因:

需要动态捕捉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}'用于将每次迭代的时间戳写入文件;

最后,使用&使命令在后台运行,实现持续收集。

通过以上方法,可以实现动态捕捉Linux系统上的CPU和内存使用情况。

0