Linux CPU使用率查询

1. top 命令ios

下面详细介绍它的使用方法。
top - 01:06:48 up  1:22,  1 user,  load average: 0.06, 0.60,  0.48
Tasks:  29 total,   1 running,  28 sleeping,   0 stopped,   0  zombie
Cpu(s):  0.3% us,  1.0% sy,  0.0% ni, 98.7% id,  0.0% wa,  0.0%  hi,  0.0% si
Mem:    191272k total,   173656k used,    17616k free,    22052k  buffers
Swap:   192772k total,        0k used,   192772k free,   123988k  cached
            
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM     TIME+  COMMAND
1379 root      16   0  7976 2456 1980 S  0.7  1.3   0:11.03  sshd
14704 root      16   0  2128  980  796 R  0.7  0.5   0:02.72 top
1 root      16   0  1992  632  544 S  0.0  0.3   0:00.90 init
2 root       34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
3 root       RT   0     0    0    0 S  0.0  0.0   0:00.00  watchdog/0

统计信息区前五行是系统总体的统计信息。第一行是任务队列信息,同 uptime  命令的执行结果。其内容以下:
01:06:48                    当前时间
up  1:22                    系统运行时间,格式为时:分
1   user                    当前登陆用户数
load average: 0.06, 0.60, 0.48    系统负载,即任务队列的平均长度。
   三个数值分别为  1分钟、5分钟、15分钟前到如今的平均值。

第2、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容以下:
Tasks: 29 total    进程总数
1 running    正在运行的进程数
28 sleeping    睡眠的进程数
0 stopped    中止的进程数
0 zombie    僵尸进程数
Cpu(s): 0.3% us    用户空间占用CPU百分比
1.0% sy            内核空间占用CPU百分比
0.0% ni            用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id    空闲CPU百分比
0.0% wa            等待输入输出的CPU时间百分比
0.0% hi    
0.0% si    

最后两行为内存信息。内容以下:
Mem: 191272k total    物理内存总量
173656k used            使用的物理内存总量
17616k free            空闲内存总量
22052k buffers            用做内核缓存的内存量
Swap: 192772k total    交换区总量
0k used                    使用的交换区总量
192772k free            空闲交换区总量
123988k cached            缓冲的交换区总量。
            内存中的内容被换出到交换区,然后又被换入到内存,但使用过的交换区还没有被覆盖,
            该数值即为这些内容已存在于内存中的交换区的大小。
            相应的内存再次被换出时可没必要再对交换区写入。

进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
列名    含义
PID    进程id
PPID    父进程id
RUSER    Real user name
UID    进程全部者的用户id
USER    进程全部者的用户名
GROUP    进程全部者的组名
TTY    启动进程的终端名。不是从终端启动的进程则显示为 ?
PR    优先级
NI    nice值。负值表示高优先级,正值表示低优先级
P    最后使用的CPU,仅在多CPU环境下有意义
%CPU    上次更新到如今的CPU时间占用百分比
TIME    进程使用的CPU时间总计,单位秒
TIME+    进程使用的CPU时间总计,单位1/100秒
%MEM    进程使用的物理内存百分比
VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
RES    进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE    可执行代码占用的物理内存大小,单位kb
DATA    可执行代码之外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR    共享内存大小,单位kb
nFLT    页面错误次数
nDRT    最后一次写入到如今,被修改过的页面数。
S    进程状态。
            D=不可中断的睡眠状态
            R=运行
            S=睡眠
            T=跟踪/中止
            Z=僵尸进程
COMMAND    命令名/命令行
WCHAN    若该进程在睡眠,则显示睡眠中的系统函数名
Flags    任务标志,参考 sched.h

load average详解缓存

top命令中load average显示的是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载表示

  系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。若是一个进程知足如下条件则其就会位于运行队列中:

  - 它没有在等待I/O操做的结果

  - 它没有主动进入等待状态(也就是没有调用’wait’)

  - 没有被中止(例如:等待终止)

  Update:在Linux中,进程分为三种状态,一种是阻塞的进程blocked process,一种是可运行的进程runnable process,另外就是正在运行的进程running process。当进程阻塞时,进程会等待I/O设备的数据或者系统调用。

  进程可运行状态时,它处在一个运行队列run queue中,与其余可运行进程争夺CPU时间。 系统的load是指正在运行running one和准备好运行runnable one的进程的总数。好比如今系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5。load average就是必定时间内的load数量。服务器

在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出

  load average: 0.09, 0.05, 0.01

  不少人会这样理解负载均值:三个数分别表明不一样时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它们的数字固然是越小越好。数字越高,说明服务器的负载越 大,这也多是服务器出现某种问题的信号。

  而事实不彻底如此,是什么因素构成了负载均值的大小,以及如何区分它们目前的情况是 “好”仍是“糟糕”?何时应该注意哪些不正常的数值?

  回答这些问题以前,首先须要了解下这些数值背后的些知识。咱们先用最简单的例子说明, 一台只配备一块单核处理器的服务器。

  行车过桥

  一只单核的处理器能够形象得比喻成一条单车道。设想下,你如今须要收取这条道路的过桥 费 — 忙于处理那些将要过桥的车辆。你首先固然须要了解些信息,例如车辆的载重、以及 还有多少车辆正在等待过桥。若是前面没有车辆在等待,那么你能够告诉后面的司机经过。 若是车辆众多,那么须要告知他们可能须要稍等一会。

  所以,须要些特定的代号表示目前的车流状况,例如:

  0.00 表示目前桥面上没有任何的车流。 实际上这种状况与 0.00 和 1.00 之间是相同的,总而言之很通畅,过往的车辆能够丝绝不用等待的经过。

  1.00 表示恰好是在这座桥的承受范围内。 这种状况不算糟糕,只是车流会有些堵,不过这种状况可能会形成交通愈来愈慢。

  超过 1.00,那么说明这座桥已经超出负荷,交通严重的拥堵。 那么状况有多糟糕? 例如 2.00 的状况说明车流已经超出了桥所能承受的一倍,那么将有多余过桥一倍的车辆正在焦急的等待。3.00 的话状况就更不妙了,说明这座桥基本上已经快承受不了,还有超出桥负载两倍多的车辆正在等待。

  上面的状况和处理器的负载状况很是类似。一辆汽车的过桥时间就比如是处理器处理某线程 的实际时间。Unix 系统定义的进程运行时长为全部处理器内核的处理时间加上线程 在队列中等待的时间。

  和收过桥费的管理员同样,你固然但愿你的汽车(操做)不会被焦急的等待。因此,理想状态 下,都但愿负载平均值小于 1.00 。固然不排除部分峰值会超过 1.00,但久而久之保持这 个状态,就说明会有问题,这时候你应该会很焦急。

  “因此你说的理想负荷为 1.00 ?”

  嗯,这种状况其实并不彻底正确。负荷 1.00 说明系统已经没有剩余的资源了。在实际状况中 ,有经验的系统管理员都会将这条线划在 0.70:

  “须要进行调查法则”: 若是长期你的系统负载在 0.70 上下,那么你须要在事情变得更糟糕以前,花些时间了解其缘由。

  “如今就要修复法则”:1.00 。 若是你的服务器系统负载长期徘徊于 1.00,那么就应该立刻解决这个问题。不然,你将半夜接到你上司的电话,这可不是件使人愉快的事情。

  “凌晨三点半锻炼身体法则”:5.00。 若是你的服务器负载超过了 5.00 这个数字,那么你将失去你的睡眠,还得在会议中说明这状况发生的缘由,总之千万不要让它发生。

  那么多个处理器呢?个人均值是 3.00,可是系统运行正常!

  哇喔,你有四个处理器的主机?那么它的负载均值在 3.00 是很正常的。

  在多处理器系统中,负载均值是基于内核的数量决定的。以 100% 负载计算,1.00 表示单个处理器,而 2.00 则说明有两个双处理器,那么 4.00 就说明主机具备四个处理器。

  回到咱们上面有关车辆过桥的比喻。1.00 我说过是“一条单车道的道路”。那么在单车道 1.00 状况中,说明这桥梁已经被车塞满了。而在双处理器系统中,这意味着多出了一倍的 负载,也就是说还有 50% 的剩余系统资源 — 由于还有另外条车道能够通行。

  因此,单处理器已经在负载的状况下,双处理器的负载满额的状况是 2.00,它还有一倍的资源能够利用。

  多核与多处理器

  先脱离下主题,咱们来讨论下多核心处理器与多处理器的区别。从性能的角度上理解,一台主 机拥有多核心的处理器与另台拥有一样数目的处理性能基本上能够认为是相差无几。固然实际 状况会复杂得多,不一样数量的缓存、处理器的频率等因素均可能形成性能的差别。

  但即使这些因素形成的实际性能稍有不一样,其实系统仍是以处理器的核心数量计算负载均值 。这使咱们有了两个新的法则:

  “有多少核心即为有多少负荷”法则: 在多核处理中,你的系统均值不该该高于处理器核心的总数量。

  “核心的核心”法则: 核心分布在分别几个单个物理处理中并不重要,其实两颗四核的处理器 等于 四个双核处理器 等于 八个单处理器。因此,它应该有八个处理器内核。网络

 

2. vmstat 查看系统负载ssh

vmstat
    procs -------memory-------- ----swap-- -----io---- --system-- ----cpu----
    r b   swpd   free buff  cache  si so    bi bo      in cs      us sy id wa
    0 0   100152 2436 97200 289740 0  1     34 45      99  33     0  0  99 0

procs
r 列表示运行和等待cpu时间片的进程数,若是长期大于1,说明cpu不足,须要增长cpu。
b 列表示在等待资源的进程数,好比正在等待I/O、或者内存交换等。函数


cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,可是若是长期大于50%,须要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,若是us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,若是wa超过30%,说明IO等待严重,这多是磁盘大量随机访问形成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈形成的(主要是块操做)。
id 列显示了cpu处在空闲状态的时间百分比性能


system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。优化


memory
swpd 切换到内存交换区的内存数量(k表示)。若是swpd的值不为0,或者比较大,好比超过了100m,只要si、so的值长期为0,系统性能仍是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 做为buffer cache的内存数量,通常对块设备的读写才须要缓冲。
cache: 做为page cache的内存数量,通常做为文件系统的cache,若是cache较大,说明用到cache的文件较多,若是此时IO中bi比较小,说明文件系统效率比较好。ui


swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。spa


IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里咱们设置的bi+bo参考值为1000,若是超过1000,并且wa值较大应该考虑均衡磁盘负载,能够结合iostat输出来分析。

3. iostat 查看磁盘负载

# iostat -x 1 10
Linux 2.6.18-92.el5xen 02/03/2009
avg-cpu: %user %nice %system %iowait %steal %idle
1.10 0.00 4.82 39.54 0.07 54.46
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 3.50 0.40 2.50 5.60 48.00 18.48 0.00 0.97 0.97 0.28
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.10 0.30 0.20 2.40 2.40 9.60 0.00 1.60 1.60 0.08
sdf 17.40 0.50 102.00 0.20 12095.20 5.60 118.40 0.70 6.81 2.09 21.36
sdg 232.40 1.90 379.70 0.50 76451.20 19.20 201.13 4.94 13.78 2.45 93.16

每隔2秒统计一次磁盘IO信息,直到按Ctrl+C终止程序,-d 选项表示统计磁盘信息, -k 表示以每秒KB的形式显示,-t 要求打印出时间信息,2 表示每隔 2 秒输出一次。第一次输出的磁盘IO负载情况提供了关于自从系统启动以来的统计信息。随后的每一次输出则是每一个间隔之间的平均IO负载情况。

rrqm/s: 每秒进行 merge 的读操做数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操做数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,由于每扇区大小为512字节。(须要计算)
wkB/s: 每秒写K字节数。是 wsect/s 的一半。(须要计算)
avgrq-sz: 平均每次设备I/O操做的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (由于aveq的单位为毫秒)。
await: 平均每次设备I/O操做的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操做的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操做,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (由于use的单位为毫秒)

若是 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
idle小于70% IO压力就较大了,通常读取速度有较多的wait.

同时能够结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)

4. 获取核心的处理器

在 Linux 下,可使用
  cat /proc/cpuinfo
获取你系统上的每一个处理器的信息。若是你只想获得数字,那么就使用下面的命令:
  grep 'model name' /proc/cpuinfo | wc -l

 

参考:https://blog.csdn.net/u011183653/article/details/19489603

相关文章
相关标签/搜索