精华内容
下载资源
问答
  • Linux系统查看CPU使用率、内存使用率、磁盘使用率

    万次阅读 多人点赞 2019-04-16 15:17:00
    一、查看CPU使用率 1. top 命令 top命令可以看到总体的系统运行状态和cpu的使用率 。 %us:表示用户空间程序的cpu使用率(没有通过nice调度) %sy:表示系统空间的cpu使用率,主要是内核程序。 %ni:表示用户空间...

    一、查看CPU使用率

    1. top 命令

    [root@sss ~]# top
    top - 16:54:38 up 7 days,  5:13,  3 users,  load average: 0.00, 0.01, 0.05
    Tasks:  77 total,   2 running,  75 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1882232 total,   813020 free,   330164 used,   739048 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  1386608 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                        
    17215 root       0 -20  127504  12176   9560 S  0.7  0.6  21:46.45 AliYunDun                                                                                                                                      
     2770 root      20   0  573932  17232   6088 S  0.3  0.9   1:11.38 tuned                                                                                                                                          
        1 root      20   0   43548   3844   2588 S  0.0  0.2   0:06.54 systemd                                                                                                                                        
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                       
        3 root      20   0       0      0      0 S  0.0  0.0   0:08.75 ksoftirqd/0                                                                                                                                    
        5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H              
    ... ...                                                                                                                                 
    

    top命令可以看到总体的系统运行状态和cpu的使用率 。

    %us:表示用户空间程序的cpu使用率(没有通过nice调度)
    %sy:表示系统空间的cpu使用率,主要是内核程序。
    %ni:表示用户空间且通过nice调度过的程序的cpu使用率。
    %id:空闲cpu
    %wa:cpu运行时在等待io的时间
    %hi:cpu处理硬中断的数量
    %si:cpu处理软中断的数量
    %st:被虚拟机偷走的cpu
    注:99.0 id,表示空闲CPU,即CPU未使用率,100%-99.0%=1%,即系统的cpu使用率为1%。
    

    2、vmstat

    详细使用和参数介绍参考网址

    3、sar

    sar命令语法和vmstat一样。命令不存在时需要安装sysstat包,这个包很有用。
    

    命令示例:

    例如每1秒采集一次CPU使用率,共采集5次。
    
    [root@sss ~]# sar -u 1 5
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:56:03 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    04:56:04 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:05 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:06 PM     all      0.99      0.00      0.99      0.00      0.00     98.02
    04:56:07 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:08 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    Average:        all      0.20      0.00      0.20      0.00      0.00     99.60
    

    和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。

    [root@sss ~]# sar -P 0 -u 1 5
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:39:13 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    04:39:14 PM       0      0.00      0.00      0.99      0.00      0.00     99.01
    04:39:15 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:16 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:17 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:18 PM       0      1.00      0.00      0.00      0.00      0.00     99.00
    Average:          0      0.20      0.00      0.20      0.00      0.00     99.60
    [root@izuf633l0ge76tv5mzalpmz ~]# 
    

    进程队列长度和平均负载状态
    例如每1秒采集一次,共采集5次。

    [root@sss ~]# sar -q 1 5  
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:40:14 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
    04:40:15 PM         0       149      0.00      0.01      0.05         0
    04:40:16 PM         0       149      0.00      0.01      0.05         0
    04:40:17 PM         0       149      0.00      0.01      0.05         0
    04:40:18 PM         1       149      0.00      0.01      0.05         0
    04:40:19 PM         1       149      0.00      0.01      0.05         0
    Average:            0       149      0.00      0.01      0.05         0
    

    输出项:

    runq-sz:运行队列的长度(等待运行的进程数)
    
    plist-sz:进程列表中进程(processes)和线程(threads)的数量
    
    ldavg-1:最后1分钟的系统平均负载(System load average)
    
    ldavg-5:过去5分钟的系统平均负载
    
    ldavg-15:过去15分钟的系统平均负载
    

    创建的平均值和上下文切换的次数
    例如每1秒收集一次,共收集5次。

    [root@sss ~]# sar -w 1 5 
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:41:39 PM    proc/s   cswch/s
    04:41:40 PM      0.00    274.26
    04:41:41 PM      0.00    277.78
    04:41:42 PM      0.00    285.00
    04:41:43 PM      0.00    280.00
    04:41:44 PM      0.00    270.00
    Average:         0.00    277.40
    

    sar命令也可以获取过去指定日期的性能参数。

    [root@sss ~]# sar -u -f /var/log/sa/sa08
    Linux 3.10.0-693.2.2.el7.x86_64 (localhost.localdomain)         04/08/2019      _x86_64_        (1 CPU)
    
    10:54:35 AM       LINUX RESTART
    
    11:00:02 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    11:10:01 AM     all     12.93      0.23      2.89      1.54      0.00     82.41
    11:20:01 AM     all     46.58      0.00      8.81      0.79      0.00     43.82
    11:30:01 AM     all     44.93      0.00      9.68      0.15      0.00     45.24
    11:40:02 AM     all      0.25      0.00      0.15      0.00      0.00     99.60
    11:50:01 AM     all      0.19      0.00      0.13      0.00      0.00     99.68
    12:00:01 PM     all      0.31      0.00      0.19      0.14      0.00     99.37
    ... ...
    

    4、mpstat

    这个命令也在sysstat包中,语法类似。
    cpu使用情况比sar更加详细些,也可以用-P指定某颗cpu 。
    

    例如每1秒收集一次,共5次。

    [root@sss ~]# mpstat 1 5 
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:58:01 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    04:58:02 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:03 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:04 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:05 PM  all    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
    04:58:06 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    Average:     all    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80
    

    5、iostat

    这个命令主要用来查看io使用情况,也可以来查看cpu,个人感觉不常用。
    

    示例

    [root@sss ~]# iostat -c 1 2
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.26    0.00    0.21    0.01    0.00   99.53
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.00    0.00    0.00    0.00    0.00  100.00
    

    6、dstat

    每秒cpu使用率情况获取

    [root@sss ~]#  dstat -c
    ----total-cpu-usage----
    usr sys idl wai hiq siq
      0   0 100   0   0   0
      0   1  99   0   0   0
      1   0  99   0   0   0
      0   0 100   0   0   0
      0   0 100   0   0   0
      1   1  98   0   0   0
      0   0 100   0   0   0
      ... ...
    

    最占cpu的进程获取

    [root@sss ~]# dstat --top-cpu  
    -most-expensive-
      cpu process   
    AliYunDun    0.2
    AliYunDun    2.0
    mysqld       1.0
    AliYunDun    1.0
    kworker/0:1H 1.0
    AliYunDun    1.0
    AliYunDun    1.0
    AliYunDun    1.0
    

    二、查看内存使用率

    1、top命令

    top 命令查看内存使用率

    查看第四行: KiB Mem
    内存使用率: used/ total
    

    2、free命令

    free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。

    1.命令格式:
    free [参数]
    
    2.命令功能:
    free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
    
    3.命令参数:
    -b  以Byte为单位显示内存使用情况。 
    
    -k  以KB为单位显示内存使用情况。 
    
    -m  以MB为单位显示内存使用情况。
    
    -g   以GB为单位显示内存使用情况。 
    
    -o  不显示缓冲区调节列。 
    
    -s<间隔秒数>  持续观察内存使用状况。 
    
    -t  显示内存总和列。 
    
    -V  显示版本信息。 
    
    4.使用实例:

    实例1:显示内存使用情况

    命令示例:

    free [-k] # 以 kb  为单位显示内存使用状况
    free -g # 以 G 为单位显示内存使用状况
    free -m # 以 M 为单位显示内存使用状况
    free -t  # 以总和的形式显示内存的使用信息
    free -s 1 # 每一秒显示内存使用情况
    

    输出:

    [root@sss ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384944
    Swap:             0           0           0
    
    [root@sss ~]# free -g
                  total        used        free      shared  buff/cache   available
    Mem:              1           0           0           0           0           1
    Swap:             0           0           0
    
    [root@sss ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1838         324         791           0         722        1352
    Swap:             0           0           0
    
    [root@sss ~]# free -t
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    Total:      1882232      331760      811004
    
    [root@sss ~]# free -s 1
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331784      810980         592      739468     1384924
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331784      810980         592      739468     1384924
    Swap:             0           0           0
    ... ...
    

    说明–对这些数值的解释:

    total:总计物理内存的大小。
    
    used:已使用多大。
    
    free:可用有多少。
    
    Shared:多个进程共享的内存总额。
    
    Buff/cache:磁盘缓存的大小。
    

    第三行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
    当可用内存少于额定值的时候,就会进行交换

    如何看额定值:

    命令:

    cat /proc/meminfo 
    

    输出:

    [root@sss ~]# cat /proc/meminfo
    MemTotal:        1882232 kB
    MemFree:          811244 kB
    MemAvailable:    1385300 kB
    Buffers:           81268 kB
    Cached:           602500 kB
    SwapCached:            0 kB
    Active:           601948 kB
    Inactive:         379880 kB
    Active(anon):     298392 kB
    Inactive(anon):      256 kB
    Active(file):     303556 kB
    Inactive(file):   379624 kB
    Unevictable:           0 kB
    Mlocked:               0 kB
    SwapTotal:             0 kB
    SwapFree:              0 kB
    Dirty:               320 kB
    Writeback:             0 kB
    AnonPages:        298052 kB
    Mapped:            47236 kB
    Shmem:               592 kB
    Slab:              55772 kB
    SReclaimable:      44076 kB
    SUnreclaim:        11696 kB
    KernelStack:        2384 kB
    PageTables:         5808 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:      941116 kB
    Committed_AS:     810896 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:       10604 kB
    VmallocChunk:   34359719676 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:    237568 kB
    CmaTotal:              0 kB
    CmaFree:               0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    DirectMap4k:       63360 kB
    DirectMap2M:     2033664 kB
    DirectMap1G:           0 kB
    

    交换将通过三个途径来减少系统中使用的物理页面的个数:

    1.减少缓冲与页面cache的大小, 
    
    2.将系统V类型的内存页面交换出去,  
    
    3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。 
    

    事实上,少量地使用swap是不是影响到系统性能的。

    那buffers和cached都是缓存,两者有什么区别呢?

    为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
    
    磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。
    
    Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
    
    Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
    
    简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
    
    所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
    
    如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
    
    实例2:以总和的形式显示内存的使用信息

    命令:

     	free -t 
    

    输出:

    [root@sss ~]# free -t
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    Total:      1882232      331760      811004
    
    实例3:周期性的查询内存使用信息

    命令:

    free -s 10
    

    输出:

    [root@sss ~]# free -s 10
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      324924      816688         496      740620     1392280
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      324944      816664         496      740624     1392260
    Swap:             0           0           0
    

    说明:

    每10s 执行一次命令
    

    三、查看磁盘使用率

    1、输入df命令

    [root@sss ~]# df
    

    显示详情:

    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/vda1 41151808 3794244 35244132 10% /
    devtmpfs 930644 0 930644 0% /dev
    tmpfs 941116 0 941116 0% /dev/shm
    tmpfs 941116 468 940648 1% /run
    tmpfs 941116 0 941116 0% /sys/fs/cgroup
    tmpfs 188224 0 188224 0% /run/user/0

    说明

    磁盘使用率=(Used列数据之和)/(1k-blocks列数据之和)
    

    磁盘和内存的区别与联系:

    (磁盘--也叫硬盘--或是U盘--或是移动硬盘)
    1、硬盘与内存都是存储器,一个是内部,一个是外部。
    
    2、硬盘与内存的区别是很大的,这里只谈最主要的三点:
    	1)内存是计算机的工作场所,硬盘用来存放暂时不用的信息;
    	2)内存是半导体材料制作,硬盘是磁性材料制作;
    	3)内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。
    	
    3、内存与硬盘的联系也非常密切:
    		硬盘上的信息永远是暂时不用的,要用请装入内存!
    		CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。
    		
    4、计算机的启动过程就是一个从硬盘上把最常用信息装入内存的过程。
    
    5、硬盘则决定你的电脑可以装下多少东西,内存则决定你的电脑开机后一次最多可以运行多少程序(如手机运行内存)。
    
    展开全文
  • 文章目录CPU使用率的定义查看CPU使用率:top和pidstat排查高CPU使用率:pref参考文献 写前面: 由于之前开发分布式系统中由于云服务器性能原因,导致系统总是断连等错误。但是之前一般只是简单gdb调试一下,...

    写在前面:
    由于之前在开发分布式系统中由于云服务器性能原因,导致系统总是断连等错误。但是之前一般只是简单gdb调试一下,定位错误异常艰难,所以决定开设此专栏,系统的记录我学习Linux 性能优化的历程。

    作者邮箱:2107810343@qq.com
    时间:2021/04/29 13:46
    实现环境:Linux
    系统:ubuntu 18.04

    CPU使用率的定义

    CPU使用率是一个衡量当前CPU瓶颈的重要指标。我们首先就需要知道CPU使用率是怎么计算出来的。

    为了维护CPU时间,Linux会事先定义节拍率(内核表示HZ),触发时间中断,并维护全局变量Jiffies记录了开机以来的节拍数。每发生一次时间中断,Jiffies的值就加一。


    这也是CPU时间片轮转法实施的基础。

    节拍数是内核的可配置选项,可以设置为100、250、1000等。不同的系统可能设置不同数值,可以通过查看/boot/config内核选项来查看它的配置值。

    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ grep 'CONFIG_HZ=' /boot/config-$(uname -r)
    CONFIG_HZ=250
    # 我这里设置就是250HZ,也就是4ms切换一次
    

    Linux通过 /proc 虚拟文件系统,向用户空间提供系统内部状态信息,而/proc/stat提供的就是系统的CPU 和任务统级时间。

    # 保留CPU的数据
    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ cat /proc/stat | grep ^cpu
    cpu  15517599 934 269286 18794245 70312 0 3441 0 0 0
    cpu0 11026589 293 105096 6155651 46206 0 1590 0 0 0
    cpu1 4491010 640 164189 12638593 24106 0 1850 0 0 0
    

    第一行时两个CPU各个时间的总和,以下是各个列的解释:

    列名 含义
    cpu 表示CPU编号,如cpu0,cpu1
    user 代表用户态的CPU时间,不包括nice和guest时间
    nice 待避岙低优先级用户态CPU时间,也就是进程的nice值被调整为1-19之间时的CPU时间
    system 内核态CPU时间
    idle 代表空闲时间,不包括等待I/O时间
    iowait 等待I/O的CPU时间
    irq 硬中断的CPU时间
    softtrip 软中断的CPU时间
    steal 代表当前系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间
    guest 通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的CPU时间
    guest_nice 以低优先级运行虚拟机的时间

    而CPU使用率,就是除了空闲时间外其他时间占总CPU时间的百分比:
    在这里插入图片描述
    但是这个公式是有缺陷的,/proc/stat里面统计的是开机以来的数据,我们真正需要的是瞬时值,所以公式就应该做个修改,每隔几秒取以下值,两次间隔中取差值去计算CPU使用率:
    在这里插入图片描述

    查看CPU使用率:top和pidstat

    现在,我们来使用top查看一下CPU的使用率:

    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ top
    

    在这里插入图片描述
    在这个结果中,第三行就是CPU使用率了。然后下面白色行之后就是每个进程的情况,都有一个%CPU列,表示进程的CPU使用率。它是用户态和内核态CPU使用率的总和,包括进程用户空间使用的CPU、通过系统调用执行的内核空间CPU以及在就绪队列中等待运行的CPU。

    但是top,没有具体解决如何查看用户态和内核态CPU使用率的问题,我们就需要使用pidstat来查看一下。

    # 每秒输出一次数据,总共输出3组
    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ pidstat 1 3
    

    在这里插入图片描述
    可以看到红框圈出来一些数据,我们挨个来解读一下:

    列名 含义
    %user 用户态CPU使用率
    %system 内核态CPU使用率
    %guest 运行虚拟机CPU使用率
    %wait 等待CPU使用率
    %cpu 总CPU使用率

    排查高CPU使用率:pref

    我们刚刚在这幅图也看到了,node进程占用了非常高的CPU使用率,由于不是作者自己写的进程,我只能尝试着排查,给大家演示一下:

    在这里插入图片描述
    调试的话,熟悉Linux开发的小伙伴肯定第一时间想到的就是gdb调试了,但是gdb调试并不适合性能分析的早期应用。因为gdb调试程序的过程会中断程序运行,这在线上环境往往是不允许的。

    我们现在来使用工具perf来分析CPU性能问题:
    先安装一下perf吧:

    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ sudo apt install linux-tools-common
    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ sudo apt install linux-tools-generic
    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ sudo apt install linux-tools-4.15.0-140-generic
    

    然后执行以下命令:

    # 这个可以像top那样,实时显示占用CPU时钟最多的函数或者指令,因此可以查找热点函数
    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ perf top
    

    在这里插入图片描述
    第一行有三个数据:采样数(samples)、事件类型(event)和事件总数量(event count)
    它的输出结果分别包括四种数据:

    列名 含义
    overhead 该符号的性能事件在所有采样中的比例
    shared 该函数或指令所在动态库共享对象
    object 共享对象的类型,[.]表示用户空间的可执行程序,或者动态连接库,[k]表示内核空间
    symbol 函数名,当函数名未知的时候,用16进制的地址来表示

    这里我们可以看到是node进程里面的某个函数(具体看图)造成的CPU高使用率。


    node是nodejs,是vscode中插件的依赖,可以直接kill

    另外,由于perf top是实时查看CPU使用情况的,但是不会保存数据,也就无法用于离线或者后续的分析,我们就需要使用使用 perf record 和 perf report 了:

    # 开启后自动捕捉数据,按ctrl+c结束采样
    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ sudo perf record
    ^C[ perf record: Woken up 5 times to write data ]
    [ perf record: Captured and wrote 1.443 MB perf.data (24504 samples) ]
    
    # 展示采样的数据
    ubuntu@VM-0-2-ubuntu:~/ByteTalk/UserService$ sudo perf report
    

    在这里插入图片描述


    这个采样百分比和某进程是否占用过高的CPU资源是无关的!

    参考文献

    [1] 倪朋飞.Linux性能优化实战.极客时间
    
    展开全文
  • VC++获取CPU使用率,内存使用率

    千次阅读 多人点赞 2020-10-24 09:06:37
    /*********************获取CPU使用率***************************/ __int64 LCMSysHelp::CompareFileTime(FILETIME time1, FILETIME time2) { __int64 a = time1.dwHighDateTime << 32 | time1....

    VC++开发常用功能一系列文章 (欢迎订阅,持续更新…)
    源代码demo已上传到百度网盘:永久生效

    /*********************获取CPU使用率***************************/
    
    __int64 LCMSysHelp::CompareFileTime(FILETIME time1, FILETIME time2)
    {
    	__int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime;
    	__int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime;
    
    	return (b - a);
    }
    
    void LCMSysHelp::getWin_CpuUsage(int lineFlag)
    {
    	//Sleep(100);
    
    	ofstream location_out;
    	location_out.open(LCMManager::GetInstance()->getsendImgPtr()->logtxt[lineFlag], std::ios::out | std::ios::app);
    
    	location_out << "进入CPU记录函数" << endl;
    
    
    	HANDLE hEvent;
    	BOOL res;
    	FILETIME preidleTime;
    	FILETIME prekernelTime;
    	FILETIME preuserTime;
    	FILETIME idleTime;
    	FILETIME kernelTime;
    	FILETIME userTime;
    
    	res = GetSystemTimes(&idleTime, &kernelTime, &userTime);
    	preidleTime = idleTime;
    	prekernelTime = kernelTime;
    	preuserTime = userTime;
    
    	hEvent = CreateEventA(NULL, FALSE, FALSE, NULL); // 初始值为 nonsignaled ,并且每次触发后自动设置为nonsignaled
    
    	while (true)
    	{
    		WaitForSingleObject(hEvent, 50);
    		res = GetSystemTimes(&idleTime, &kernelTime, &userTime);
    
    		__int64 idle = CompareFileTime(preidleTime, idleTime);
    		__int64 kernel = CompareFileTime(prekernelTime, kernelTime);
    		__int64 user = CompareFileTime(preuserTime, userTime);
    
    		__int64 cpu = (kernel + user - idle) * 100 / (kernel + user);
    		__int64 cpuidle = (idle) * 100 / (kernel + user);
    
    		if (cpu > 85)
    		{
    			location_out << "CPU利用率:" << cpu << "%" << " CPU空闲率:" << cpuidle << "%" << endl;
    		}
    		preidleTime = idleTime;
    		prekernelTime = kernelTime;
    		preuserTime = userTime;
    	}
    
    	location_out.close();
    
    }
    
    
    void LCMSysHelp::getWin_MemoryUsage(long& CurrentValue, long &MaxVal)
    {
    	HANDLE m_hProcess = GetCurrentProcess();
    	PROCESS_MEMORY_COUNTERS pmc = { 0 };
    	GetProcessMemoryInfo(m_hProcess, &pmc, sizeof(pmc));
    	CurrentValue = pmc.WorkingSetSize / (1024 * 1024);
    	MaxVal = pmc.PeakWorkingSetSize / (1024 * 1024);
    }
    
    

    在这里插入图片描述
    链接:https://pan.baidu.com/s/1elnvpBpwoDvqT3Hh9fBvog
    提取码:un98
    复制这段内容后打开百度网盘手机App,操作更方便哦
    vc学习交流群,订阅者可加入,分享更多源码干活,更多常用代码…

    展开全文
  • Linux系统查看CPU使用率的几个命令

    万次阅读 多人点赞 2017-06-06 18:02:19
    linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。而监控CPU的性能一般包括以下3点:运行队列、CPU使用率和上下文切换。 对于每一个CPU来说运行队列最好不要超过3,例如,如果是双核CPU就...

    在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。而监控CPU的性能一般包括以下3点:运行队列、CPU使用率和上下文切换。

    对于每一个CPU来说运行队列最好不要超过3,例如,如果是双核CPU就不要超过6。如果队列长期保持在3以上,说明任何一个进程运行时都不能马上得到cpu的响应,这时可能需要考虑升级cpu。另外满负荷运行cpu的使用率最好是user空间保持在65%~70%,system空间保持在30%,空闲保持在0%~5% 。

    下面总结下查看CPU使用率常用的几个命令。

    1、top

    这个命令很常用,在第三行有显示CPU当前的使用情况。

    [root@li676-235 ~]# top -bn 1 -i -c
    top - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39
    Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie
    Cpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
    Mem: 1014660k total, 880512k used, 134148k free, 264904k buffers
    Swap: 262140k total, 34788k used, 227352k free, 217144k cached
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
    12760 root 20 0 15084 1944 1632 R 2.0 0.2 0:00.01 top -bn 1 -i -croot@li676-235 ~]# top -bn 1 -i -c
    top - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39
    Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie
    Cpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
    Mem: 1014660k total, 880512k used, 134148k free, 264904k buffers
    Swap: 262140k total, 34788k used, 227352k free, 217144k cached
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
    12760 root 20 0 15084 1944 1632 R 2.0 0.2 0:00.01 top -bn 1 -i -c

    如上所示,top命令可以看到总体的系统运行状态和cpu的使用率 。

    %us:表示用户空间程序的cpu使用率(没有通过nice调度)

    %sy:表示系统空间的cpu使用率,主要是内核程序。

    %ni:表示用户空间且通过nice调度过的程序的cpu使用率。

    %id:空闲cpu

    %wa:cpu运行时在等待io的时间

    %hi:cpu处理硬中断的数量

    %si:cpu处理软中断的数量

    %st:被虚拟机偷走的cpu

    2、vmstat

    之前在本博客中有介绍过vmstat的使用,详细使用和参数介绍参考网址:http://www.sijitao.net/1925.html 。

    [root@li676-235 ~]# vmstat 1 5
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r b swpd free buff cache si so bi bo in cs us sy id wa st
     2 0 34792 68376 147688 356132 16 16 421 385 2 2 5 4 91 1 0
     3 0 34792 97368 147688 326884 0 0 0 0 133 134 15 6 79 0 0
     1 0 34792 62432 147696 360704 0 0 0 88 267 278 63 18 19 0 0
     0 0 34792 97160 147696 326904 0 0 0 0 71 82 12 4 84 0 0
     1 0 34792 56572 147696 364540 0 0 0 4 261 246 61 23 16 0 0root@li676-235 ~]# vmstat 1 5
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r b swpd free buff cache si so bi bo in cs us sy id wa st
     2 0 34792 68376 147688 356132 16 16 421 385 2 2 5 4 91 1 0
     3 0 34792 97368 147688 326884 0 0 0 0 133 134 15 6 79 0 0
     1 0 34792 62432 147696 360704 0 0 0 88 267 278 63 18 19 0 0
     0 0 34792 97160 147696 326904 0 0 0 0 71 82 12 4 84 0 0
     1 0 34792 56572 147696 364540 0 0 0 4 261 246 61 23 16 0 0

    3、sar

    sar命令语法和vmstat一样。命令不存在时需要安装sysstat包,这个包很有用。

    CPU使用率

    例如每1秒采集一次CPU使用率,共采集5次。

    [root@li676-235 ~]# sar -u 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:41:25 PM CPU %user %nice %system %iowait %steal %idle
    02:41:26 PM all 64.71 0.00 18.63 0.00 0.98 15.69
    02:41:27 PM all 29.47 0.00 22.11 14.74 0.00 33.68
    02:41:28 PM all 67.33 0.00 31.68 0.99 0.00 0.00
    02:41:29 PM all 7.00 0.00 2.00 0.00 0.00 91.00
    02:41:30 PM all 69.00 0.00 23.00 0.00 0.00 8.00
    Average: all 47.79 0.00 19.48 3.01 0.20 29.52root@li676-235 ~]# sar -u 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:41:25 PM CPU %user %nice %system %iowait %steal %idle
    02:41:26 PM all 64.71 0.00 18.63 0.00 0.98 15.69
    02:41:27 PM all 29.47 0.00 22.11 14.74 0.00 33.68
    02:41:28 PM all 67.33 0.00 31.68 0.99 0.00 0.00
    02:41:29 PM all 7.00 0.00 2.00 0.00 0.00 91.00
    02:41:30 PM all 69.00 0.00 23.00 0.00 0.00 8.00
    Average: all 47.79 0.00 19.48 3.01 0.20 29.52

    和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。

    [root@li676-235 ~]# sar -P 0 -u 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:45:14 PM CPU %user %nice %system %iowait %steal %idle
    02:45:15 PM 0 44.00 0.00 52.00 4.00 0.00 0.00
    02:45:16 PM 0 9.28 0.00 26.80 62.89 1.03 0.00
    02:45:17 PM 0 3.06 0.00 14.29 81.63 1.02 0.00
    02:45:18 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
    02:45:19 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
    Average: 0 13.09 0.00 27.81 58.28 0.82 0.00root@li676-235 ~]# sar -P 0 -u 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:45:14 PM CPU %user %nice %system %iowait %steal %idle
    02:45:15 PM 0 44.00 0.00 52.00 4.00 0.00 0.00
    02:45:16 PM 0 9.28 0.00 26.80 62.89 1.03 0.00
    02:45:17 PM 0 3.06 0.00 14.29 81.63 1.02 0.00
    02:45:18 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
    02:45:19 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
    Average: 0 13.09 0.00 27.81 58.28 0.82 0.00

    进程队列长度和平均负载状态

    例如每1秒采集一次,共采集5次。

    [root@li676-235 ~]# sar -q 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:48:47 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
    02:48:48 PM 1 133 0.34 0.43 0.41
    02:48:49 PM 2 132 0.34 0.43 0.41
    02:48:50 PM 1 133 0.34 0.43 0.41
    02:48:51 PM 2 134 0.31 0.42 0.40
    02:48:52 PM 1 133 0.31 0.42 0.40
    Average: 1 133 0.33 0.43 0.41root@li676-235 ~]# sar -q 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:48:47 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
    02:48:48 PM 1 133 0.34 0.43 0.41
    02:48:49 PM 2 132 0.34 0.43 0.41
    02:48:50 PM 1 133 0.34 0.43 0.41
    02:48:51 PM 2 134 0.31 0.42 0.40
    02:48:52 PM 1 133 0.31 0.42 0.40
    Average: 1 133 0.33 0.43 0.41

    输出项:

    runq-sz:运行队列的长度(等待运行的进程数)

    plist-sz:进程列表中进程(processes)和线程(threads)的数量

    ldavg-1:最后1分钟的系统平均负载(System load average)

    ldavg-5:过去5分钟的系统平均负载

    ldavg-15:过去15分钟的系统平均负载

    进程创建的平均值和上下文切换的次数

    例如每1秒收集一次,共收集5次。

    [root@li676-235 ~]# sar -w 1 5 
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:54:03 PM proc/s cswch/s
    02:54:04 PM 1.01 156.57
    02:54:05 PM 1.00 132.00
    02:54:06 PM 2.00 201.00
    02:54:07 PM 2.02 126.26
    02:54:08 PM 2.00 114.00
    Average: 1.61 145.98root@li676-235 ~]# sar -w 1 5 
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    02:54:03 PM proc/s cswch/s
    02:54:04 PM 1.01 156.57
    02:54:05 PM 1.00 132.00
    02:54:06 PM 2.00 201.00
    02:54:07 PM 2.02 126.26
    02:54:08 PM 2.00 114.00
    Average: 1.61 145.98

    sar命令也可以获取过去指定日期的性能参数。

    [root@li676-235 ~]# sar -u -f /var/log/sa/sa20 
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    01:10:01 PM CPU %user %nice %system %iowait %steal %idle
    01:20:02 PM all 25.78 0.00 8.88 3.59 0.15 61.60
    01:30:01 PM all 26.06 0.00 9.96 3.33 0.10 60.55
    01:40:01 PM all 25.73 0.00 9.17 3.70 0.09 61.32
    01:50:01 PM all 25.70 0.00 9.50 2.79 0.12 61.89
    02:00:01 PM all 26.70 0.00 9.73 2.20 0.10 61.28
    02:10:01 PM all 26.16 0.00 9.56 4.34 0.11 59.82
    02:20:01 PM all 25.49 0.00 9.61 2.76 0.07 62.07
    02:30:01 PM all 26.47 0.00 9.94 0.64 0.30 62.65
    02:40:02 PM all 27.32 0.00 10.37 3.86 0.15 58.30
    02:50:02 PM all 26.98 0.00 10.38 4.56 0.13 57.95
    Average: all 26.24 0.00 9.71 3.18 0.13 60.74root@li676-235 ~]# sar -u -f /var/log/sa/sa20 
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    01:10:01 PM CPU %user %nice %system %iowait %steal %idle
    01:20:02 PM all 25.78 0.00 8.88 3.59 0.15 61.60
    01:30:01 PM all 26.06 0.00 9.96 3.33 0.10 60.55
    01:40:01 PM all 25.73 0.00 9.17 3.70 0.09 61.32
    01:50:01 PM all 25.70 0.00 9.50 2.79 0.12 61.89
    02:00:01 PM all 26.70 0.00 9.73 2.20 0.10 61.28
    02:10:01 PM all 26.16 0.00 9.56 4.34 0.11 59.82
    02:20:01 PM all 25.49 0.00 9.61 2.76 0.07 62.07
    02:30:01 PM all 26.47 0.00 9.94 0.64 0.30 62.65
    02:40:02 PM all 27.32 0.00 10.37 3.86 0.15 58.30
    02:50:02 PM all 26.98 0.00 10.38 4.56 0.13 57.95
    Average: all 26.24 0.00 9.71 3.18 0.13 60.74

    4、mpstat

    这个命令也在sysstat包中,语法类似。

    例如每1秒收集一次,共5次。

    [root@li676-235 ~]# mpstat 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    03:01:18 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    03:01:19 PM all 52.53 0.00 23.23 0.00 0.00 0.00 0.00 0.00 24.24
    03:01:20 PM all 21.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 75.00
    03:01:21 PM all 53.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 29.00
    03:01:22 PM all 26.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 71.00
    03:01:23 PM all 46.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 36.00
    Average: all 39.68 0.00 13.23 0.00 0.00 0.00 0.00 0.00 47.09root@li676-235 ~]# mpstat 1 5
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    03:01:18 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    03:01:19 PM all 52.53 0.00 23.23 0.00 0.00 0.00 0.00 0.00 24.24
    03:01:20 PM all 21.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 75.00
    03:01:21 PM all 53.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 29.00
    03:01:22 PM all 26.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 71.00
    03:01:23 PM all 46.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 36.00
    Average: all 39.68 0.00 13.23 0.00 0.00 0.00 0.00 0.00 47.09

    cpu使用情况比sar更加详细些,也可以用-P指定某颗cpu 。

    5、iostat

    这个命令主要用来查看io使用情况,也可以来查看cpu,个人感觉不常用。

    [root@li676-235 ~]# iostat -c 1 2
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    avg-cpu: %user %nice %system %iowait %steal %idle
     4.53 0.01 3.81 0.63 0.04 90.99
    avg-cpu: %user %nice %system %iowait %steal %idle
     38.00 0.00 14.00 0.00 0.00 48.00root@li676-235 ~]# iostat -c 1 2
    Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    avg-cpu: %user %nice %system %iowait %steal %idle
     4.53 0.01 3.81 0.63 0.04 90.99
    avg-cpu: %user %nice %system %iowait %steal %idle
     38.00 0.00 14.00 0.00 0.00 48.00

    6、dstat

    每秒cpu使用率情况获取

    [root@li676-235 ~]# dstat -c
    ----total-cpu-usage----
    usr sys idl wai hiq siq
     5 4 91 1 0 0
     27 11 62 0 0 0
     52 11 37 0 0 0
     26 10 63 0 0 1
     50 13 37 0 0 1
     21 6 72 0 0 0root@li676-235 ~]# dstat -c
    ----total-cpu-usage----
    usr sys idl wai hiq siq
     5 4 91 1 0 0
     27 11 62 0 0 0
     52 11 37 0 0 0
     26 10 63 0 0 1
     50 13 37 0 0 1
     21 6 72 0 0 0

    最占cpu的进程获取

    [root@li676-235 ~]# dstat --top-cpu
    -most-expensive-
     cpu process 
    mysqld 1.5
    php-fpm: pool 24
    mysqld 59root@li676-235 ~]# dstat --top-cpu
    -most-expensive-
     cpu process 
    mysqld 1.5
    php-fpm: pool 24
    mysqld 59
    展开全文
  • CPU 使用率是最常用来描述系统CPU 性能的指标。 CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示。那么 **CPU 使用率到底是怎么算出来的吗?再有 %user、%nice、 %system、%iowait 、%steal 等等,...
  • 使用Python获取本地CPU使用率和内存使用率 如果我们想利用Python来做一个脚本去获取计算机的CPU使用率和内存使用信息,我们可以使用psutil库中的一些函数来获取 from psutil import * # cpu_percent()可以获取cpu的...
  • 记一次 JVM CPU 使用率飙高问题的排查过程

    万次阅读 多人点赞 2017-04-26 20:12:59
    首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图: ![cpu-usage](https://img-blog.csdnimg.cn/202004071615390.png) 如上图所示, **下午3:45** 分之前,CPU使用率明显飙高,最高飙到近 100%,为...
  • Android获取CPU使用率

    千次阅读 2017-05-11 15:41:50
    android获取CPU当前的使用率
  • 入职Oracle 以后想着把之前写过的《编程之美》中控制CPU使用率曲线的程序再写一边, 但是总是因为入职需要学习的东西太多, 没有时间。 程序早就写好了, 终于有机会贴出来了。o(∩∩)o.. 最早的时候我采用C实现的...
  • cpu使用率分析

    千次阅读 2018-01-29 19:23:26
    用RT的时候需要里面添加查看CPU使用率,找到了rt自带的cpu使用率的历程,自己对比源码分析了一下其实现的思路,如有不对的地方欢迎指正,再次谢谢各位! RT里面提供的CPU使用率函数, 首先把cpu_usage_...
  • 今天了下《编程之美》的第一章 第一节 让CPU占用曲线听你指挥,感觉很有意思。网上找了很多大牛写的方法,但是没找到详细介绍JAVA怎么多核OS中实现这样效果的。 思考 对于单核CPU的OS,网上提供了很多解法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 381,398
精华内容 152,559
关键字:

在哪里看cpu使用率