美文网首页程序员
Ubuntu使用top command监测CPU、内存使用情况

Ubuntu使用top command监测CPU、内存使用情况

作者: Chao已被使用 | 来源:发表于2020-04-25 04:23 被阅读0次

最近学习了几种在Ubuntu中监测CPU和内存使用情况的方法,整理一下。

%%%%%%% top命令行
top命令用于显示Linux进程。它提供了运行系统的动态实时视图。通常,这个命令显示系统的摘要信息以及当前由Linux内核管理的进程或线程的列表。
一旦运行此命令,它将打开一个交互式命令模式,其中上半部分将包含进程和资源使用情况的统计信息。下半部分包含当前正在运行的进程的列表。按下q将简单地退出命令模式。

top
Fig 1: top命令行结果示意

如果提示没有安装top则需要

sudo apt install apt-file && apt-file update

面板信息:
PID:显示任务的唯一进程id。
PR:表示任务的优先级。
SHR:表示任务使用的共享内存数量。
VIRT:任务使用的总虚拟内存。
USER:任务所有者的用户名。
%CPU:表示CPU使用量。
TIME+:CPU时间,与“TIME”相同,但通过百分之一秒反映出更细的粒度。
表示任务使用的共享内存大小(kb)。
NI:表示任务的NI值。一个负的NICE值意味着更高的优先级,而正的NICE值意味着更低的优先级。
%MEM:显示任务的内存使用情况。

top -n 10 -d 1 -H -i -b > top-output.txt

这行命令是将top的输出结果读取十次 ('-n 10'),时间间隔1s ('-d 1'),'H' 代表我们查看的Threads,'I' 表示Irix Mode,'b'表示Batch Mode : Send output from top to file or any other programs。关于这几种模式,大家可以直接在Fig 1显示的界面中用shift+i, shift+h体会一下。
这时我们就能看到输出结果了,首先在对应目录下生成txt文件。


Fig 2: top在文件目录下输出结果

在命令行显示txt文件结果。

cat top-output.txt

结果如图:


Fig 3: 利用cat在命令行显示文件内容

为了满足不同需求,又尝试了几种不同的存储方式:

for i in {1..5}; do top -n 10 -d 0.1 -H -i -b >> ${i}.txt; done

输出结果:


将top输出存储到5个txt文件中,每个文件包含10次top输出结果,采样间隔为0.1s

这样我们就存取了5s内每间隔0.1s系统CPU和内存使用情况的数据,可以看到一个变化趋势。但是,由于每次存取内容格式并不完全一致,对于后续数据处理会是个问题,所以还是存为单个文件方便处理,将command稍作处理即可。

for i in {1..50}; do top -n 1 -d 0.1 -H -i -b >> ${i}.txt; done

这样就会存为50个txt文件,内容格式基本一致,方便后续处理。

附Matlab处理数据code:

% calculate CPU usage and MEM usage
% version 0.1
%==================== settings ================
file_num     = 100;
CPU_col      = 9; % you should look into the file to determine the value
MEM_col      = 10; % you should look into the file to determine the value

clear clc
CPU.preamble_detect = zeros(1,file_num);       MEM.preamble_detect = zeros(1,file_num);
CPU.fractional_res1 = zeros(1,file_num);       MEM.fractional_res1 = zeros(1,file_num);
CPU.freq_xlating_f1 = zeros(1,file_num);       MEM.freq_xlating_f1 = zeros(1,file_num);
CPU.python          = zeros(1,file_num);       MEM.python          = zeros(1,file_num);
CPU.decoder9        = zeros(1,file_num);       MEM.decoder9        = zeros(1,file_num);
CPU.gr_uhd_usrp     = zeros(1,file_num);       MEM.gr_uhd_usrp     = zeros(1,file_num);
CPU.message_socket  = zeros(1,file_num);       MEM.message_socket  = zeros(1,file_num);
CPU.usage_sum       = zeros(1,file_num);       MEM.usage_sum       = zeros(1,file_num);

%====================== processing =========
for file_ind = 1:file_num
    filename = [num2str(file_num) '.txt'];
    
    % load data
    raw_data = function_loadfile(filename);
    
    % get the length of the data, so we know the number of the threads there
    length_here = size(raw_data, 1);
    CPU.usage_sum(file_ind) = sum(str2double(raw_data(11:length_here,CPU_col)));
    MEM.usage_sum(file_ind) = sum(str2double(raw_data(11:length_here,MEM_col)));
    
    % check the threads
    for threads_ind = 11:length_here
        
        switch raw_data(threads_ind,1)
            case '25481'
                CPU.preamble_detect(file_ind) = str2double(raw_data(threads_ind,CPU_col));
                MEM.preamble_detect(file_ind) = str2double(raw_data(threads_ind,MEM_col));
                
            case '25480'
                CPU.freq_xlating_f1(file_ind) = str2double(raw_data(threads_ind,CPU_col));
                MEM.freq_xlating_f1(file_ind) = str2double(raw_data(threads_ind,MEM_col));
                
            case '25476'
                CPU.python(file_ind) = str2double(raw_data(threads_ind,CPU_col));
                MEM.python(file_ind) = str2double(raw_data(threads_ind,MEM_col));
                
            case '25483'
                CPU.decoder9(file_ind) = str2double(raw_data(threads_ind,CPU_col));
                MEM.decoder9(file_ind) = str2double(raw_data(threads_ind,MEM_col));
                
            case '25482'
                CPU.fractional_res1(file_ind) = str2double(raw_data(threads_ind,CPU_col));
                MEM.fractional_res1(file_ind) = str2double(raw_data(threads_ind,MEM_col));
                
            case '25479'
                CPU.gr_uhd_usrp(file_ind) = str2double(raw_data(threads_ind,CPU_col));
                MEM.gr_uhd_usrp(file_ind) = str2double(raw_data(threads_ind,MEM_col));
                
            case '25478'
                CPU.message_socket(file_ind) = str2double(raw_data(threads_ind,CPU_col));
                MEM.message_socket(file_ind) = str2double(raw_data(threads_ind,MEM_col));
                
                
        end
    end
end

top还有很多其他参数,感兴趣的可以自行学习。

man top

Peace!

相关文章

  • Ubuntu使用top command监测CPU、内存使用情况

    最近学习了几种在Ubuntu中监测CPU和内存使用情况的方法,整理一下。 %%%%%%% top命令行top命令用...

  • Linux 排查问题常用命令

    top命令,查看系统负载、cpu使用情况、内存使用情况,和进程列表 free -m 查看内存使用情况 iostat...

  • 性能测试-命令篇(五)

    一、cpu(进程) 1、top:查看系统整体的内存和cpu使用情况,以及各个进程资源使用情况 输入top,再输入1...

  • 常用Linux命令

    看CPU和内存占用top查看某一个进程所有线程的CPU和内存占用top -Hp {PID}查看内存使用情况free...

  • 常用JVM诊断命令

    top 使用top主要查看各进程CPU、内存使用情况。 jmap jmap可以查看堆内存初始化配置信息以及堆内存的...

  • 服务器操作中的常用命令

    以下命令在CentOS下有效 查看内存使用情况 使用命令:free -m 查看CPU使用情况 使用命令:top 查...

  • vmstat详解

    vmstat相比top,可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存...

  • 操作命令

    Linux使用top与free命令查看CPU与内存使用情况 top命令: 显示内容解释: 第一行top分别为:当前...

  • 性能监控

    用top -u [userid] 来查看这个用户进程的内存和cpu使用情况

  • 服务器使用情况排查

    查看服务器整体运行情况 top 查看CPU使用情况 vmstat -n 3 2 查看内存使用情况 free -m ...

网友评论

    本文标题:Ubuntu使用top command监测CPU、内存使用情况

    本文链接:https://www.haomeiwen.com/subject/wbacwhtx.html