在做SLAM的时候我们需要统计一个算法占用CPU和内存的情况,然后绘制曲线放在论文里面以说明算法在计算开销方面的性能。因此,我们的目标是利用一个命令实现在一段时间内以固定的频率记录算法A的内存和CPU占用率,然后把这个数据绘制成曲线。经过几番查阅和尝试,确定选择使用 "top" 命令实现统计内存和CPU占用情况。
1 “top” 命令统计单一进程
我所使用的命令是
top -n 10 -d 1 -b |grep -E "chrome" |tr -s " "| cut -f 9,10 > test.txt
其中:
-n 10 表示次数设置为10次
-d 1 表示时间间隔为1秒
|grep -E "chrome" 表示输出线程chrome的信息;
|tr -s " " 则表示利用一个空格来替代字段中出现的多个空格;
> test.txt 表示把数据写入到名为 test 的文本文件中;
线程的名字可以直接在终端中敲入 top 查看每一个线程的名称,如下图:
输出的文件中,从左到右依次为 “ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ CMMAND”, 其中:
PID(Process ID): 进程标示号。
USER: 进程所有者的用户名。
PR: 进程的优先级别。
NI: 进程的优先级别数值。
VIRT: 进程占用的虚拟内存值。
RES: 进程占用的物理内存值。
SHR: 进程使用的共享内存值。
S: 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU: 该进程占用的CPU使用率。
%MEM: 该进程占用的物理内存和总内存的百分比。
TIME+: 该进程启动后占用的总的CPU时间。
Command: 进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
更详细的参数说明请参考赛艇队长博客。
最后利用ubuntu下的excel或者是LibeOffice把txt文件导入到excelz中删除不需要的列,保留内存和CPU占用列,再利用画图工具进行画图显示。
参考资料:
https://blog.csdn.net/qinglu000/article/details/28436727
https://blog.csdn.net/hhy_csdn/article/details/81812195