评价参数

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. 在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。

    //在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. // 例如: 当输入a = {8,4,1,6,7,4,9,6,4}, // a = {1,7,9,8,4,6,4 ...

  2. nginx 安装配置+清缓存模块安装

    经过一段时间的使用,发现 nginx 在并发与负载能力方面确实优于 apache,现在已经将大部分站点从 apache 转到了 nginx 了.以下是 nginx 的一些简单的安装配置.环境操作系统: ...

  3. XML 的解析方法

    四种XML解析方法: (1)Dom生成和解析XML文档 *解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构.     * 优点:整个文档树在内存中,便 ...

  4. Why does typeof array with objects return “Object” and not “Array”?

    https://stackoverflow.com/questions/4775722/check-if-object-is-an-array One of the weird behaviour a ...

  5. psd文件中截取固定大小的图片

    1.选择需要操作的图层 使用选框工具, 设置固定大小和固定大小的值,在图层上拉取选区 2.使用移动工具  使用垂直.水平居中 使选择的icon在选区块中间 3.再选择好块区域调整好位置后 使用截取工具 ...

  6. Spring初学之spring的事务管理xml

    所有的java类都是用的上一篇文章:Spring初学之spring的事务管理 不同的是,这时xml配置事务,所以就要把java类中的那些关于spring的注解都删掉,然后在xml中配置,Applica ...

  7. Python显示百分比

    print(format(a/b,'.2%')) 显示两位小数的百分比显示

  8. 10.0.4_CentOS_120g

    对应 VMware Workstation 版本为:“10.0.4 build-2249910”

  9. Compaction介绍

    Compaction介绍 Compaction是buffer->flush->merge的Log-Structured Merge-Tree模型的关键操作,主要起到如下几个作用: 1)合并 ...

  10. dp1--乘积最大

    dp1--乘积最大 一.心得 1.用excel填数组很方便 2. dp就是填表 找状态就是缩小规模 找状态转移方程就是 找状态的最后一次关系 二.题目 8782:乘积最大 查看 提交 统计 提问 总时 ...