精华内容
下载资源
问答
  • linux cpu使用率测试

    2019-02-13 10:00:06
    linuxcpu利用常见脚本测试说明。
  • linux下c/c++ 实现cpu使用率查询,内存使用率查询,当个程序使用查询 主要应用/proc/stat /proc/meminfo /proc/pid/stat /proc/pid/status 等文件中的内容进行计算
  • 在本篇文章里小编给各位分享了关于Linux CPU负载和CPU使用率的相关知识点内容,有需要的朋友们参考下。
  • 该应用脚本是为了提高机器的CPU使用率,它会根据当前机器CPU (会自动排除本程序进程所占用CPU%) 决定是否需要”协助“已提高当前机器的CPU的使用率;
  • linux控制cpu占用

    2018-01-30 14:09:47
    Linux平台下通过程序控制cpu占用,最好在空闲的机器上测试
  • 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
    

    显示详情:

    Filesystem1K-blocksUsedAvailableUse%Mounted on
    /dev/vda14115180837942443524413210%/
    devtmpfs93064409306440%/dev
    tmpfs94111609411160%/dev/shm
    tmpfs9411164689406481%/run
    tmpfs94111609411160%/sys/fs/cgroup
    tmpfs18822401882240%/run/user/0

    说明

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

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

    (磁盘--也叫硬盘--或是U盘--或是移动硬盘)
    1、硬盘与内存都是存储器,一个是内部,一个是外部。
    
    2、硬盘与内存的区别是很大的,这里只谈最主要的三点:
    	1)内存是计算机的工作场所,硬盘用来存放暂时不用的信息;
    	2)内存是半导体材料制作,硬盘是磁性材料制作;
    	3)内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。
    	
    3、内存与硬盘的联系也非常密切:
    		硬盘上的信息永远是暂时不用的,要用请装入内存!
    		CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。
    		
    4、计算机的启动过程就是一个从硬盘上把最常用信息装入内存的过程。
    
    5、硬盘则决定你的电脑可以装下多少东西,内存则决定你的电脑开机后一次最多可以运行多少程序(如手机运行内存)。
    
    展开全文
  • Linux中如果要监视一个进程的运行情况,如查看它的CPU使用效率和内存使用情况,就需要从系统的/proc目录的读取一些系统信息。本文介绍了获得系统CPU和内存情况的代码。
  • linux c程序获取cpu使用率及内存使用情况
  • 主要给大家介绍了关于Linux杀不死的进程之CPU使用率700%的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • java监控linux cpu使用率

    2010-07-15 10:29:17
    java实现linux下的cpu资源使用率监控
  • Linux CPU使用率超过100%的原因

    万次阅读 2018-11-16 11:08:35
    今天在服务器上部署流媒体做推流的时候使用top命令发现CPU占用率竟高达...百度了一番发现原来top命令是按CPU使用率来显示的,4核理论上最高可达400% 原文:https://www.cnblogs.com/duhuo/p/6065921.html  ...

     

    今天在服务器上部署流媒体做推流的时候使用top命令发现CPU占用率竟高达270%

     

    在top模式下按1可看见CPU的数量是4

     

    百度了一番发现原来top命令是按CPU总使用率来显示的,4核理论上最高可达400%

    原文:https://www.cnblogs.com/duhuo/p/6065921.html

     

    展开全文
  • 利用该代码的移植,可以获取基于linux系统上的开发板的cpu和内存的使用情况
  • Linux 系统 CPU 使用率简单分析

    千次阅读 2018-12-14 21:59:45
    CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示。 CPU 使用率 为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机一来的节拍数...

    CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示。

    CPU 使用率

    为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机一来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。
    Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息。
    stat
    第一列是 CPU 编号,其他列则表示不同场景下 CPU 的累加节拍数。

    诸如 top、ps 之类的性能工具展示的 %user、%nice、%system、%iowait、%steal 等等,它们都代表什么意思呢?

    top

    • user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
    • nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
    • system(通常缩写为 sy),代表内核态 CPU 时间。
    • idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
    • iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
    • irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
    • softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
    • steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
    • guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
    • guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间。

    而我们通常所说的 CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,用公式表示就是:
    CPU 使用率 = 1 - 空闲时间 / 总 CPU 时间

    如果直接用 /proc/stat 的数据计算 CPU 使用率,它记录的是开机以来的节拍数累加值,所以直接算出来的,是开机以来的平均 CPU 使用率,一般参考价值不大。事实上,为了计算 CPU 使用率,性能工具一般都会取间隔一段时间,比如 3 秒,的两次值,作差后,再计算出这段时间内的平均 CPU 使用率。

    不同的工具设置的间隔时间可能不同,比如 top 默认使用 3 秒时间间隔,而 ps 使用的是进程的整个生命周期。

    怎么查看 CPU 使用率

    top 或者 pidstat 这类的工具。pidstat 可以详细查看进程的用户态 CPU 和内核态 CPU。
    在这里插入图片描述

    • %usr:用户态 CPU 使用率
    • %system:内核态 CPU 使用率
    • %guest:运行虚拟机 CPU 使用率
    • %cpu:总的 CPU 使用率
    • CPU:CPU 编号

    在这里插入图片描述
    top 第三行 %CPU 就是系统的 CPU 使用率,含义上面说过。top 默认显示的是所有 CPU 的平均值,按下数字 1,就可以切换到每个 CPU 的使用率了。
    每个进程的 %CPU 列,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率之和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU、以及在就绪队列等待运行的 CPU。

    CPU 使用率过高怎么办?

    通过 top、ps、pidstat 等工具,能够轻松找到 CPU 使用率过高的进程。接下来就要分析 占用 CPU 的到底是代码里的哪个函数呢?找到后才能更高效、更针对性地进行优化。

    GDB 并不适合在性能分析的早期应用,GDB 调试程序的过程会中断程序运行,这在线上环境往往是不允许的,所以 GDB 只适合在性能分析的后期,当你找到了出问题的大致函数后,线下再借助它来进一步调试函数内部的问题。

    最推荐的工具是 perf。perf 是 Linux 2.6.31 以后内置的性能分析工具,它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。两种常见用法:
    第一种是 perf top,类似 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数,使用界面如下:
    perf
    第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。比如这个例子中,peft 总共采集了 747 个 CPU 时钟事件,而总事件数为 174906250。采样数如果过少,那下面的排序和百分比就没什么实际参考价值了。

    • Overhead,是该符号的性能事件在所有采样中的比例,用百分比来表示。
    • Shared,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
    • Object,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
    • Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

    第二种常见用法是,perf recordperf reportperf top 实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后序分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 peft report 解析展示。

    对进程进行跟踪分析其调用:
    perf top -g -p <pid>

    小结

    CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查系统性能问题时,通常会关注的第一个指标。所以我们更要熟悉它的含义,尤其要弄清楚用户(%usr)、Nice(%ni)、系统(%sy)、等待I/O(%wa)、中断(hi)以及软中断(si)这几种不同 CPU 的使用率。比如说:

    • 用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。
    • 系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。
    • I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。
    • 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。

    碰到 CPU 使用率升高的问题,可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数。

    展开全文
  • Linux查看CPU使用率的一些命令

    千次阅读 2019-01-22 09:59:36
    在使用linux系统进行运维的过程中,我们经常要查看一下CPU使用率,以便观察以及分析系统的整体运行情况。 那么使用以下这些命令有何作用?我们一起看看: 1. top 使用频率比较高的命令,可在第三行看到cpu的...

    在使用linux系统进行运维的过程中,我们经常要查看一下CPU的使用率,以便观察以及分析系统的整体运行情况。

    那么使用以下这些命令有何作用?我们一起看看:

    1. top

    使用频率比较高的命令,可在第三行看到cpu的使用情况。

    [root@db 22:42 ~]$ top -bn 1 -i -c
    top - 22:52:17 up 55 days, 22:56,  2 users,  load average: 1.92, 2.31, 2.08
    Tasks: 266 total,   1 running, 265 sleeping,   0 stopped,   0 zombie
    Cpu(s):  2.4%us,  1.7%sy,  0.0%ni, 94.8%id,  0.0%wa,  0.0%hi,  1.1%si,  0.0%st
    Mem:   8062036k total,  6161944k used,  1900092k free,   167064k buffers
    Swap: 16777208k total,   539444k used, 16237764k free,  3075204k cached

      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                           
    11455 root      20   0 15160 1240  832 R  3.3  0.0   0:00.13 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. sar

    此命令不存在时需要安装sysstat包。

    [root@dbserver ~]# sar -P 0 -u 2 5
    Linux 5.4.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    10:26:34 PM CPU %user %nice %system %iowait %steal %idle
    10:26:36 PM 0 41.00 0.00 55.00 4.00 0.00 0.00
    10:26:38 PM 0 8.27 0.00 27.81 62.88 1.01 0.00
    10:26:40 PM 0 2.07 0.00 15.28 81.63 1.02 0.00
    10:26:42 PM 0 4.13 0.00 24.69 72.16 1.03 0.00
    10:26:44 PM 0 4.14 0.00 23.68 72.16 1.03 0.00
    Average: 0 15.09 0.00 26.82 49.29 0.82 0.00

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

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

    [root@dbserver ~]# sar -q 2 5
    Linux 5.4.5-x86_64-linode52 (dbserver) 09/23/2017 _x86_64_ (1 CPU)
    10:28:37 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
    10:28:38 PM 1 131 0.35 0.44 0.41
    10:28:39 PM 2 132 0.34 0.43 0.41
    10:28:40 PM 1 133 0.34 0.43 0.41
    10:28:41 PM 2 134 0.31 0.42 0.40
    10:28:42 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分钟的系统平均负载

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

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

    [root@dbserver  ~]# sar -w 2 5
    Linux 5.4.5-x86_64-linode52 (dbserver) 09/23/2017 _x86_64_ (1 CPU)
    10:44:03 PM proc/s cswch/s
    10:44:05 PM 1.01 156.57
    10:44:07 PM 1.00 132.00
    10:44:09 PM 2.00 201.00
    10:44:11 PM 2.02 126.26
    10:44:13 PM 2.00 114.00
    Average: 1.61 145.98

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

    [root@dbserver ~]# sar -u -f /var/log/sa/sa20
    Linux 5.4.5-x86_64-linode52 (dbserver) 09/23/2017 _x86_64_ (1 CPU)
    11:10:01 PM CPU %user %nice %system %iowait %steal %idle
    11:20:02 PM all 25.78 0.00 8.88 3.59 0.15 61.60
    11:30:01 PM all 26.06 0.00 9.96 3.33 0.10 60.55
    11:40:01 PM all 25.73 0.00 9.17 3.70 0.09 61.32
    11:50:01 PM all 25.70 0.00 9.50 2.79 0.12 61.89
    12:00:01 PM all 26.70 0.00 9.73 2.20 0.10 61.28
    12:10:01 PM all 26.16 0.00 9.56 4.34 0.11 59.82
    12:20:01 PM all 25.49 0.00 9.61 2.76 0.07 62.07
    12:30:01 PM all 26.47 0.00 9.94 0.64 0.30 62.65
    12:40:02 PM all 27.32 0.00 10.37 3.86 0.15 58.30
    12: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

    3.vmstat

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存 交换情况,IO读写情况。相比top,通过vmstat可以看到整个机器的 CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率。

    [root@dbserver 23:20 ~]$ vmstat 2
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0 539444 1889712 167068 3077024    0    0     0     3    1    0  2  3 95  0  0    
     0  0 539444 1889704 167068 3077028    0    0     0     0 1474 1742  1  0 99  0  0    
     8  0 539444 1889704 167068 3077028    0    0     0     0 1472 1224  6  8 86  0  0  
     

     表示vmstat每2秒采集数据,一直采集,直到我们主动结束程序。

    参数详解

    Linux 内存监控vmstat命令输出分成六个部分:

    (1)进程procs
        r:在运行队列中等待的进程数
        b:在等待io的进程数
    (2)Linux 内存监控内存memoy
        swpd:现时可用的交换内存(单位KB)。
        free:空闲的内存(单位KB)。
        buff: 缓冲去中的内存数(单位:KB)。
        cache:被用来做为高速缓存的内存数(单位:KB)。
    (3) Linux 内存监控swap交换页面
        si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
        so: 从内存交换到磁盘的交换页数量,单位:KB/秒。
    (4)Linux 内存监控 io块设备:
        bi: 发送到块设备的块数,单位:块/秒。
        bo: 从块设备接收到的块数,单位:块/秒。
    (5)Linux 内存监控system系统:
        in: 每秒的中断数,包括时钟中断。
        cs: 每秒的环境(上下文)转换次数。
    (6)Linux 内存监控cpu中央处理器:
        cs:用户进程使用的时间 。以百分比表示。
        sy:系统进程使用的时间。 以百分比表示。
        id:中央处理器的空闲时间 。以百分比表示。

    常见诊断:

    1) 假如 r 经常大于4 ,且 id 经常小于40,表示中央处理器的负荷很重。

    2) 假如 bi,bo 长期不等于0,表示物理内存容量太小。

    每个参数的具体意思如下:

    r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈 了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队 列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

    b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

    swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

    free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

    buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

    cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

    si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

    so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

    bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

    bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

    in 每秒CPU的中断次数,包括时间中断

    cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的 数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或 者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核 空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的 时间少了,CPU没有充分利用,是不可取的。

    us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

    sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

    id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

    wt 等待IO CPU时间。

    4.dstat

    每秒cpu使用率情况获取

    [root@dbserver 23:27 ~]$ dstat -c
    ----total-cpu-usage----
    usr sys idl wai hiq siq
      2   2  95   0   0   1
      4   2  92   0   0   2
     11   7  75   0   0   6
      2   2  96   0   0   0
      0   0  99   0   0   0

    最占cpu的进程获取
    [root@dbserver 23:29 ~]$ dstat --top-cpu
    -most-expensive-
      cpu process   
    java         2.6
    java         3.1
    java          21
    java         0.1
    java         0.6


     

    展开全文
  • linux 查看CPU使用率

    千次阅读 2019-02-18 11:14:06
    top命令可以看到总体的系统运行状态和cpu使用效率 %us: 表示用户空间程序的cpu使用效率 %sy:表示系统空间程序的cpu使用效率 %ni: 表示用户空间通过nice调度过的程序的cpu使用效率 %id: 空闲cpu %wa:cpu运行时...
  • 查看 cpu 使用率脚本 cpu_id=`top -bn 1 | sed -n 3p |awk -F , '{print $4}'|awk '{print $1}'` echo -e "${cpu_id}"|awk '{printf "%2.2f",100-$1}' 查看内存使用率脚本 set -u InfoFile="/proc/meminfo" [[ -f ...
  • CPU 使用率是最常用来描述系统CPU 性能的指标。 CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示。那么 **CPU 使用率到底是怎么算出来的吗?再有 %user、%nice、 %system、%iowait 、%steal 等等,...
  • 文章目录CPU使用率的定义查看CPU使用率:top和pidstat排查高CPU使用率:pref参考文献 写在前面: 由于之前在开发分布式系统中由于云服务器性能原因,导致系统总是断连等错误。但是之前一般只是简单gdb调试一下,...
  • 第 第 PAGE 1 页 共 NUMPAGES 1 页 Linux top命令查看多核CPU每个核心的使用率 ... Linux top命令查看多核CPU每个核心的使用率 top命令是linux下常用的工具可以查看各个进程的CPU使用情况先一个实例 这是Ramnode双核
  • Linux中计算特定CPU使用率

    万次阅读 2018-12-23 20:03:51
    Linux中计算特定CPU使用率需求解决方案拓展参考 需求 在Linux中可以通过top指令查看某一进程占用的CPU情况,也可以查看某一个CPU使用率情况(先top指令,然后按数字“1”键即可显示每一个CPU的使用情况),如下图: ...
  • LinuxCPU使用率低负载高

    千次阅读 2017-11-14 13:40:15
    等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就导致负载过大,但cpu使用率低。 二、场景分析 (1)磁盘读写请求过多就会导致大量I/O等待 cpu的工作效率要高于磁盘,而进程在...
  • 作为 Linux 运维工程师,在日常工作中我们会遇到 Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行,带来企业损失。 很多运维的同学遇到这种状况往往会不知所措,...
  • 整体思想 ...1、使用python包psutil 获取linux服务器CPU、内存等相关数据 2、数据保存在本地或者保存在数据库 3、读取数据,使用python包pyecharts画图 4、使用Flask,页面前端访问 转载: ...
  • linux cpu 使用率

    2010-10-19 20:11:42
    cpu 使用率 cpu 使用率 cpu 使用率 cpu 使用率 cpu 使用率
  • Linux查看CPU使用率、内存使用率等

    千次阅读 2020-04-16 11:56:01
    一、CPU使用率查看 1.cat /proc/loadavg命令 $ cat /proc/loadavg 0.08 0.06 0.10 1/442 8347 前三项分别是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载为在特定时间间隔内运行队列中的平均进程数,...
  • 观测CPU使用率是否过高; 观察running进程数与状态为R进程数量否一致,如果数量不一致,进行第二步。 第二步、针对R状态的进程进行分析 使用pidstat -p pid确认对应R状态的进程是否存在 使用ps aux .
  • Linux平台Cpu使用率的计算

    千次阅读 2017-08-03 20:38:02
    以下在linux man文档中对ps命令输出中有关cpu使用率的解释: CPU usage is currently expressed as the percentage of time spent running during the entire lifetime of a process. This is not ideal, and ...
  • linux CPU使用率过高或负载过高的处理思路1、查看系统CPU负载及使用率的命令为:top vmstat top 命令:查看进程级别的cpu使用情况。 vmstat 命令:查看系统级别的cpu使用情况。 下面通过具体的图例来分析: 1.1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,940
精华内容 55,576
关键字:

linuxcpu使用率怎么看

linux 订阅