评价参数

1)CPU utilization:最直观最重要的就是CPU的使用率。如果长期超过80%,则表明CPU遇到了瓶颈;
2)User time: 用户进程使用的CPU;该数值越高越好,表明越多的CPU用在了用户实际的工作上;
3)System time: 内核使用的CPU,包括了硬中断、软中断使用的CPU;该数值越低越好,太高表明在网络和驱动层遇到瓶颈;
4)Waiting: CPU花在等待IO操作上的时间;该数值很高,表明IO子系统遇到瓶颈;
5)Idel time: CPU空闲的时间;
6)Load average: 在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数;在Linux中,进程分为三种状态:一种是阻塞的进程blocked process,一种是可运行的进程runnableprocess,另外就是正在运行的进程runningprocess。当进程阻塞时,进程会等待I/O设备的数据或者系统调用。进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行running one和准备好运行runnableone的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5,load average就是一定时间内的load数量均值;
7)Context Switch: 上下文切换。

top 命令 查看CPU 信息

第一行:

top - :: up  min,  users,   load average: 0.10, 0.07, 0.14

分别表示的是:当前系统时间;up 25 min表示已经系统已经运行25分钟; 4 users:表示系统中有4个登录用户;load average: 分别表示最近 1 分钟, 5 分钟, 15分钟 CPU的负载的平均值。

这一行最重要的就是 load average。

第二行:

Tasks:  total,   running,  sleeping ,  stopped,  zombie

分别表示系统中的进程数:总共92个进程, 1个在运行,91个在sleep,0个stopped, 0个僵尸。

第三行:

Cpu(s): 0.0%us,  1.7 %sy, 0.0%ni, 97.7%id, 0.0%wa, 0.3%hi, 0.3%si, 0.0%st

这一行提供了关于CPU使用率的最重要的信息,分别表示 users time, system time, nice time, idle time, wait time, hard interrupte time, soft interrupted time, steal time; 其中最终要的是:users time, system time, wait time ,idle time 等等。nice time 表示用于调准进程nice level所花的时间。

第四行:

Mem:  total, used ,free, buffers

提供的是关于内存的信息,因为Linux会尽量的来使用内存来进行缓存,所以这些信息没有多大的价值,free数值小,并不代表存在内存瓶颈。

第五行:

Swap: total, used, free ,cached

提供的是关于swap分区的使用情况,这些信息也没有太大的价值,因为Linux的使用内存的机制决定的。used值很大并不代表存在内存瓶颈。

剩下是关于每个进程使用的资源的情况,进程的各种信息,按照使用CPU的多少排序,每个字段的含义如下:

PID: 表示进程ID;

USER: 表示运行进程的用户;

PR:表示进程优先级;

NI:表示进程nice值,默认为0;

VIRT:The  total  amount  of  virtual  memory  used by the task.进程占用的虚拟内存大小,包括了swap out的内存page。

RES: Resident size (kb).The non-swapped physical memory a task is using. 进程使用的常驻内存大小,没有包括swap out的内存。

SHR:Shared Mem size (kb).The amount of shared memory used by a task.  It simply reflects memory that could be potentially shared with other processes. 其实应该就是使用 shmget() 系统调用分配的共享内存,可以在多个进程之间共享访问。

S: 表示进程处于哪种状态:R: Running; S: sleeping; T: stoped; D: interrupted; Z:zomobie;

%CPU: 进程占用的CPU;

%MEM:进程占用的内存;

%TIME+: 进程运行时间;

COMMAND: 进程运行命令;

上面的 top 命令默认是以 进程为单位来显示的,我们也可以以线程为单位来显示: top -H

可以看到以线程为单位是,Tasks totol数量明显增加了,有92增加到了 134。

如果仅仅想查看 CPU 的 load average,使用uptime命令就行了:

[root@localhost ~]# uptime
 :: up  :,   users,  load average: 0.00, 0.02, 0.00

vmstat 查看CPU 信息

上面各个字段的含义:

FIELD DESCRIPTION FOR VM MODE
   Procs
       r: The number of processes waiting for run time.
       b: The number of processes in uninterruptible sleep.
   Memory
       swpd: the amount of virtual memory used.
       free: the amount of idle memory.
       buff: the amount of memory used as buffers.
       cache: the amount of memory used as cache.
       inact: the amount of inactive memory. (-a option)
       active: the amount of active memory. (-a option)
   Swap
       si: Amount of memory swapped in from disk (/s).
       so: Amount of memory swapped to disk (/s).
   IO
       bi: Blocks received from a block device (blocks/s).
       bo: Blocks sent to a block device (blocks/s).
   System
       in: The number of interrupts per second, including the clock.
       cs: The number of context switches per second.
   CPU
       These are percentages of total CPU time.
       us: Time spent running non-kernel code. (user time, including nice time)
       sy: Time spent running kernel code. (system time)
       id: Time spent idle. Prior to Linux , this includes IO-wait time.
       wa: Time spent waiting , included in idle.
       st: Time stolen , unknown.

和CPU相关的信息有 user time, system time, idle time, wait time, steal time;

另外提供了关于中断和上下文切换的信息。System 中的in,表示每秒的中断数,cs表示每秒的上下文切换数;

其它的字段是关于内存和磁盘的。

iostat 命令查看 CPU 信息

[root@localhost ~]# iostat
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.27    0.02    4.74    0.28    0.00   94.69

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0
sda
[root@localhost ~]# iostat -c
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.26    0.02    4.72    0.27    0.00   94.72

提供了cpu的平均使用率。

ps 命令查看某个进程和某个线程的 CPU 信息

[root@localhost ~]# pidof mysqld
[root@localhost ~]# ps -mp  -o THREAD,pmem,rss,vsz,tid,pid
USER     %CPU PRI SCNT WCHAN  USER SYSTEM %MEM   RSS    VSZ   TID   PID
mysql          -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -
mysql         - -         -      -    -     -      -       -

先获得 mysqld 的基础PID 2412,

然后查看其线程的信息:ps -mp 2412-o THREAD,pmem,rss,vsz,tid,pid ( -p 指定进程PID, -o 指定输出格式,参见man ps)

第一列就是关于线程CPU的信息。另外我们也可以查出是占有的CPU很高的线程的tid。

关于ps我们一般使用 ps -elf , 如果想查看线程,可以 ps -elLf,其中的L表示 Leight weight process轻量级进程。

进程分析是终极利器——pidstat 

pidstat是进程分析的终极利器,利用它可以分析进程(包括进程中所有每个线程)的各种信息:

cpu使用(默认就是cpu, -u 也是cpu),  内存使用(-r 包括page fault),IO情况(-d),进程切换(-w),

pidstat 可以使用 -p xxx 指定进程pid,单独分析一个进程及其所有线程;也可以是所有进程 -p ALL,或者是所有活动进程(默认是所有活动进程):

默认是所有活动进程的 CPU信息:

[root@localhost ~]# pidstat
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       PID    %usr %system  %guest    %CPU   CPU  Command
:: AM               init
:: AM               kthreadd
:: AM               ksoftirqd/
:: AM               watchdog/
:: AM               events/

所有进程包括非活动进程,默认是CPU信息:

[root@localhost ~]# pidstat -p ALL
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       PID    %usr %system  %guest    %CPU   CPU  Command
:: AM               init
:: AM               kthreadd
:: AM               migration/
:: AM               ksoftirqd/
:: AM               stopper/
[root@localhost ~]# pidstat -p ALL | wc -l

[root@localhost ~]# ps -elf| wc -l

可以看到 上面两个结果统计系统所有进程数目是一致的。差了2,是因为结果头信息不同导致的。

查看 IO 信息(分别以进程角度和线程角度):

进程角度:

[root@localhost ~]# pidof mysqld
[root@localhost ~]# pidstat -p  -d
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
:: AM            0.00      0.00      0.00  mysqld
:: AM            0.00      0.00      0.00  mysqld
Average:               0.00      0.00      0.00  mysqld

线程角度:

[root@localhost ~]# pidstat -p  -d -t
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM      TGID       TID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
:: AM               -      0.00      0.00      0.00  mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld
:: AM         -            0.00      0.00      0.00  |__mysqld

查看 内存 信息(分别以进程角度和线程角度):

[root@localhost ~]# pidof mysqld
[root@localhost ~]# pidstat -p  -r
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
:: AM               42.18  mysqld
:: AM               42.18  mysqld
Average:                  42.18  mysqld
[root@localhost ~]# pidstat -p  -r -t
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM      TGID       TID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
:: AM               -         42.18  mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld
:: AM         -               42.18  |__mysqld

查看进程切换信息(分别以进程角度和线程角度):

[root@localhost ~]# pidstat -p  -w
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       PID   cswch/s nvcswch/s  Command
:: AM            0.00      0.00  mysqld
:: AM            0.00      0.00  mysqld
Average:               0.00      0.00  mysqld
[root@localhost ~]# pidstat -p  -w -t
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM      TGID       TID   cswch/s nvcswch/s  Command
:: AM               -      0.00      0.00  mysqld
:: AM         -            0.00      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            1.98      0.00  |__mysqld
:: AM         -            0.99      0.00  |__mysqld
:: AM         -            0.99      0.00  |__mysqld
:: AM         -            0.00      0.00  |__mysqld
:: AM         -            0.99      0.00  |__mysqld
:: AM         -            0.00      0.00  |__mysqld
:: AM         -            0.99      0.00  |__mysqld
:: AM         -            0.00      0.00  |__mysqld
:: AM         -            0.00      0.00  |__mysqld
:: AM         -            0.00      0.00  |__mysqld
:: AM         -            0.00      0.00  |__mysqld

同时,我们也可以将线程 tid 作为一个进程的 pid 来进行分析,因为本质上,线程是特殊的进程,但是他还是进程:

先查一个进程的所有线程:

[root@localhost ~]# pidof mysqld
[root@localhost ~]# pidstat -p  -t
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
:: AM               -      mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld
:: AM         -            |__mysqld

然后将她的线程 tid=1408 作为一个进程(pid)来分析:

[root@localhost ~]# pidstat -p
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       PID    %usr %system  %guest    %CPU   CPU  Command
:: AM            mysqld

mpstat(multi processor stat) 命令查看多核CPU中每个CPU核心的信息

[root@localhost ~]# mpstat
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
:: PM  all    0.26    0.02    4.30    0.27    0.26    0.15    0.00    0.00   94.74

这里因为虚拟机中的单核CPU,所以只显示all,没有显示其它核心的CPU使用情况。

sar -P {n, ALL}

查看某个CPU或者所有CPU基本信息,sar -q 查看cpu队列,任务队列,以及负载:

[root@localhost ~]# sar -P
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       LINUX RESTART

:: AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
:: AM             0.12      0.00      0.67      0.00      0.00     99.21
:: AM             0.02      0.00      0.49      0.01      0.00     99.49
:: AM             0.02      0.00      0.64      0.00      0.00     99.34
:: AM             0.03      0.00      0.49      0.02      0.00     99.46
:: AM             0.08      0.00      1.65      0.00      0.00     98.27
:: AM             0.14      0.00      1.36      0.05      0.00     98.44
Average:                0.07      0.00      0.88      0.01      0.00     99.04
[root@localhost ~]# sar -P ALL
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       LINUX RESTART

:: AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
:: AM     all      0.12      0.00      0.67      0.00      0.00     99.21
:: AM             0.12      0.00      0.67      0.00      0.00     99.21

sar -P 0 表示 0 号CPU, sar -P ALL 表示所有CPU。

[root@localhost ~]# sar -q
Linux -.el6.i686 (localhost.localdomain)       //      _i686_  ( CPU)

:: AM       LINUX RESTART

:: AM   runq-sz  plist-sz   ldavg-   ldavg-  ldavg-
:: AM                      0.00      0.01      0.06
:: AM                      0.00      0.00      0.01
:: AM                      0.00      0.00      0.00
:: AM                      0.07      0.02      0.00
:: AM                      0.00      0.00      0.00
:: AM                      0.05      0.01      0.00
Average:                         0.02      0.01      0.01

runq-sz: Run queue length (number of tasks waiting for run time). cpu上等待执行的任务队列
plist-sz: Number of tasks in the task list. 系统中的任务/进程队列

ldavg-1 ldavg-5 ldavg-15 就是 uptime 命令中的值含义一样,过去1分钟,5分钟,15分钟的平均负载。

上面的 plist-ze = 102, 我们查看一下系统中的进程(线程)的数量:

[root@localhost ~]# ps -elf | wc -l

[root@localhost ~]# ps -elLf | wc -l

 

Linux评估 CPU使用情况的更多相关文章

  1. linux 监控CPU 内存情况

    htop

  2. 全面了解 Linux 服务器 - 1. 查看 Linux 服务器的 CPU 详细情况

    1. 查看 Linux 服务器的 CPU 详细情况 判断依据: 具有相同的 core id 的 CPU 是同意个 core 超线程. 具有相同的 physical id 的 CPU 是同一个 CPU ...

  3. 编程获取linux的CPU使用的内存使用情况

    Linux可用下top.ps命令检查当前的cpu.mem用法.下面简单的例子: 一.采用ps查看资源消耗的过程 ps -aux 当您查看进程信息,第三列是CPU入住. [root@localhost ...

  4. Linux查看CPU和内存使用情况 【转】

    Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...

  5. Linux服务器CPU、内存、磁盘空间、负载情况查看python脚本

    [本文出自天外归云的博客园] 网上搜,东拼西凑,组装了一个可以查Linux服务器CPU使用率.内存使用率.磁盘空间占用率.负载情况的python脚本. 脚本内容如下: # -*- coding:utf ...

  6. C/C++获取Linux系统CPU和内存及硬盘使用情况

    需求分析: 不使用Top  df  free 等命令,利用C/C++获取Linux系统CPU和内存及硬盘使用情况 实现: //通过获取/proc/stat (CPU)和/proc/meminfo(内存 ...

  7. linux的cpu性能评估

    linux的cpu性能评估 参考自:自学it网,http://www.zixue.it/. (1)利用vmstat命令监控系统CPU[test@localhost ~]$ vmstat 2 3 #每2 ...

  8. Linux查看CPU和内存情况

    本文简单介绍在Linux上查看CPU和内存情况和一款系统资源查看工具htop. 查看CPU情况 以下是个人工作会经常使用到的服务器的信息. 查看所有CPU信息 可以通过如下命令查看所有CPU信息: # ...

  9. Linux查看CPU和内存使用情况总结

    Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内 ...

随机推荐

  1. HGVS的变异格式

    符号: 1.HGVS的变异格式由两部分组成: 1.1 reference sequence file identifier (accession.version-number) :  actual d ...

  2. gem Errno::ECONNRESET: Connection reset by peer - SSL_connect

    问题描述 在使用gem安装软件包时,会时常遇到下面的问题: ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError) Errno: ...

  3. Qt下TCP编程

    一.服务器 1.声明一个QTcpServer对象 QTcpServer* serverListener; 2.new出对象 this->serverListener = new QTcpServ ...

  4. juniper常用命令(二)

    Juniper防火墙基本命令 常用查看命令 Get int查看接口配置信息 Get int ethx/x查看指定接口配置信息 Get mip查看映射ip关系 Get route查看路由表 Get po ...

  5. shell运行java/Jar 脚本

    1.Shell执行/调用Java/Jar程序 #!/bin/bash JAVA_HOME="$HOME/jdk" BASE_DIR=`dirname $0` if [ " ...

  6. js提示确认删除吗

    <script language="javascript"> function delcfm() { if (!confirm("确认要删除?")) ...

  7. 泛型学习第一天:List与IList的区别 (二)

    原文: 探讨Ilist<>与List<> 首先要了解一点的是关于接口的基础知识: 接口不能直接实例化但是接口派生出来的抽象类可以实例化所有派生出来的抽象类都可以强制转换成接口的 ...

  8. ZooKeeper-安装和运行

    ZooKeeper安装和运行 1. 下载安装包 zookeeper-3.4.9.tar.gz 2. 解压 tar -zxvf zookeeper-3.4.9.tar.gz ZooKeeper提供了几个 ...

  9. 【转】meta标签中的http-equiv属性使用介绍

    meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...

  10. Ceph简介

    最近偶尔接触到云计算,开始对云计算感兴趣,希望能够早日加入这个计算机领域的第三次革命中去. 估计这次革命要持续二十年,也就是这辈子一直干云计算都没问题. 先了解一下Ceph吧.本博文主要是根据文献[1 ...