zoukankan      html  css  js  c++  java
  • linux系统cpu和内存占用率

    1.top

    使用权限:所有使用者

    使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

    说明:即时显示process的动态

    d :改变显示的更新速度,或是在交谈式指令列( interactive command)按s

    q :没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行

    c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dead child process )的CPU time累积起来

    s :安全模式,将交谈式指令取消,避免潜在的危机

    i :不显示任何闲置(idle)或无用(zombie)的行程

    n :更新的次数,完成后将会退出top

    b :批次档模式,搭配"n"参数一起使用,可以用来将top的结果输出到档案内

    范例:

    显示更新十次后退出;

    top -n 10

    使用者将不能利用交谈式指令来对行程下命令:

    top -s

    将更新显示二次的结果输入到名称为top.log的档案里:

    top -n 2 -b < top.log   

    另附一个命令简介linux traceroutewindows tracert两个命令相当,跟踪网络路由

    2.vmstat

    正如我们之前讨论的任何系统的性能比较都是基于基线的,并且监控CPU的性能就是以上3点,运行队列、CPU使用率和上下文切换。以下是一些对于CPU很普遍的性能要求:

    1.对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;

    2.如果CPU在满负荷运行,应该符合下列分布,

    a) User Time:65%~70%

    b) System Time:30%~35%

    c) Idle:0%~5%

    3. mpstat

    对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。

    常用的监视工具有:vmstat, top,dstat和mpstat.

    # vmstat 1

    procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

    r b swpd free buff cache si so bi bo in cs us sy id wa

    0 0 104300 16800 95328 72200 0 0 5 26 7 14 4 1 95 0

    0 0 104300 16800 95328 72200 0 0 0 24 1021 64 1 1 98 0

    0 0 104300 16800 95328 72200 0 0 0 0 1009 59 1 1 98 0

    r表示运行队列的大小,

    b表示由于IO等待而block的线程数量,

    in表示中断的数量,

    cs表示上下文切换的数量,

    us表示用户CPU时间,

    sys表示系统CPU时间,

    wa表示由于IO等待而是CPU处于idle状态的时间,

    id表示CPU处于idle状态的总时间。

    dstat可以给出每一个设备产生的中断数:

    # dstat -cip 1

    ----total-cpu-usage---- ----interrupts--- ---procs---

    usr sys idl wai hiq siq| 15 169 185 |run blk new

    6 1 91 2 0 0| 12 0 13  | 0 0 0

    1 0 99 0 0 0| 0    0  6 | 0 0 0

    0 0 100 0 0 0| 18 0  2 | 0 0 0

    0 0 100 0 0 0| 0    0  3 | 0 0 0

    我们可以看到这里有3个设备号15,169和185.设备名和设备号的关系我们可以参考文件/proc/interrupts,这里185代表网卡eth1.

    # cat /proc/interrupts

    CPU0

    0: 1277238713 IO-APIC-edge timer

    6: 5 IO-APIC-edge floppy

    7: 0 IO-APIC-edge parport0

    8: 1 IO-APIC-edge rtc

    9: 1 IO-APIC-level acpi

    14: 6011913 IO-APIC-edge ide0

    15: 15761438 IO-APIC-edge ide1

    169: 26 IO-APIC-level Intel 82801BA-ICH2

    185: 16785489 IO-APIC-level eth1

    193: 0 IO-APIC-level uhci_hcd:usb1

    mpstat可以显示每个CPU的运行状况,比如系统有4个CPU。我们可以看到:

    # mpstat –P ALL 1

    Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/2006

    05:17:31 PM CPU %user %nice %system %idle intr/s

    05:17:32 PM all 0.00 0.00 3.19 96.53 13.27

    05:17:32 PM 0 0.00 0.00 0.00 100.00 0.00

    05:17:32 PM 1 1.12 0.00 12.73 86.15 13.27

    05:17:32 PM 2 0.00 0.00 0.00 100.00 0.00

    05:17:32 PM 3 0.00 0.00 0.00 100.00 0.00

    总结的说,CPU性能监控包含以下方面:

    检查系统的运行队列,确保每一个CPU的运行队列不大于3.

    确保CPU使用分布满足70/30原则(用户70%,系统30%)。

    如果系统时间过长,可能是因为频繁的调度和改变优先级。

    CPU Bound进程总是会被惩罚(降低优先级)而IO Bound进程总会被奖励(提高优先级)。

    4.prstat命令

    要显示系统上当前运行的进程和项目的各种统计信息,请使用带有-J选项的prstat命令:

     

    %prstat -J

            PID USERNAME SIZE  RSS STATE PRI NICE     TIME CPU PROCESS/NLWP

     21634 jtd     5512K 4848K cpu0   44   0  0:00.00 0.3% prstat/1

      324 root      29M  75M sleep  59   0  0:08.27 0.2% Xsun/1

     15497 jtd       48M  41M sleep  49   0  0:08.26 0.1% adeptedit/1

      328 root    2856K 2600K sleep  58   0  0:00.00 0.0% mibiisa/11

     1979 jtd     1568K 1352K sleep  49   0  0:00.00 0.0% csh/1

     1977 jtd     7256K 5512K sleep  49   0  0:00.00 0.0% dtterm/1

      192 root    3680K 2856K sleep  58   0  0:00.36 0.0% automountd/5

     1845 jtd       24M  22M sleep  49   0  0:00.29 0.0% dtmail/11

     1009 jtd     9864K 8384K sleep  49   0  0:00.59 0.0% dtwm/8

      114 root    1640K 704K sleep  58   0  0:01.16 0.0% in.routed/1

      180 daemon  2704K 1944K sleep  58   0  0:00.00 0.0% statd/4

      145 root    2120K 1520K sleep  58   0  0:00.00 0.0% ypbind/1

      181 root    1864K 1336K sleep  51   0  0:00.00 0.0% lockd/1

      173 root    2584K 2136K sleep  58   0  0:00.00 0.0% inetd/1

      135 root    2960K 1424K sleep   0   0  0:00.00 0.0% keyserv/4

    PROJID   NPROC SIZE  RSS MEMORY     TIME CPU PROJECT

       10      52 400M 271M   68%  0:11.45 0.4% booksite

        0      35 113M 129M   32%  0:10.46 0.2% system

     

    Total: 87 processes, 205 lwps, load averages: 0.05, 0.02, 0.02

    要显示系统上当前运行的进程和任务的各种统计信息,请使用带有-T选项的prstat命令:

     

    %prstat -T

      PID USERNAME SIZE  RSS STATE PRI NICE     TIME CPU PROCESS/NLWP

     23023 root      26M  20M sleep  59   0  0:03:18 0.6% Xsun/1

     23476 jtd       51M  45M sleep  49   0  0:04:31 0.5% adeptedit/1

     23432 jtd     6928K 5064K sleep  59   0  0:00:00 0.1% dtterm/1

     28959 jtd       26M  18M sleep  49   0  0:00:18 0.0% .netscape.bin/1

     23116 jtd     9232K 8104K sleep  59   0  0:00:27 0.0% dtwm/5

     29010 jtd     5144K 4664K cpu0   59   0  0:00:00 0.0% prstat/1

      200 root    3096K 1024K sleep  59   0  0:00:00 0.0% lpsched/1

      161 root    2120K 1600K sleep  59   0  0:00:00 0.0% lockd/2

      170 root    5888K 4248K sleep  59   0  0:03:10 0.0% automountd/3

      132 root    2120K 1408K sleep  59   0  0:00:00 0.0% ypbind/1

      162 daemon  2504K 1936K sleep  59   0  0:00:00 0.0% statd/2

      146 root    2560K 2008K sleep  59   0  0:00:00 0.0% inetd/1

      122 root    2336K 1264K sleep  59   0  0:00:00 0.0% keyserv/2

      119 root    2336K 1496K sleep  59   0  0:00:02 0.0% rpcbind/1

      104 root    1664K 672K sleep  59   0  0:00:03 0.0% in.rdisc/1

    TASKID   NPROC SIZE  RSS MEMORY     TIME CPU PROJECT                    

      222      30 229M 161M   44%  0:05:54 0.6% group.staff                

      223       1  26M  20M  5.3%  0:03:18 0.6% group.staff                

       12       1  61M  33M  8.9%  0:00:31 0.0% group.staff                

        1      33  85M  53M   14%  0:03:33 0.0% system                     

     

    Total: 65 processes, 154 lwps, load averages: 0.04, 0.05, 0.06      

    //----------------------------------------------------------------------------------------------------------------------------------------------//

    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 -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 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.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.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.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.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.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.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.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 0

    最占cpu的进程获取

    [root@li676-235 ~]# dstat --top-cpu
    -most-expensive-
     cpu process 
    mysqld 1.5
    php-fpm: pool 24
    mysqld 59
  • 相关阅读:
    Python·安装扩展包的几种方法
    Arduino系列硬件资源介绍
    树莓派USB摄像头的使用
    树莓派frp服务器和客户端配置教程
    树莓派frp内网穿透
    用Windows远程桌面连接树莓派的方法
    控制窗体的位置和大小
    树霉派更换软件镜像源
    I2C的库函数应用示例
    I2C总线的Arduino库函数
  • 原文地址:https://www.cnblogs.com/dpf-learn/p/7000208.html
Copyright © 2011-2022 走看看