Chinaunix首页 | 论坛 | 博客
  • 博客访问: 531939
  • 博文数量: 230
  • 博客积分: 5726
  • 博客等级: 大校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-21 13:51
文章分类

全部博文(230)

文章存档

2011年(33)

2010年(40)

2009年(157)

分类: LINUX

2011-05-05 17:42:32

我们使用top命令来查看CPU使用状况。

top不会产生输出,屏幕内容保持不变。它刷新屏幕以显示新信息。因此,如果您只执行top并保持屏幕一直开启,则屏幕始终显示最新信息。退出top的命令为q,或者按下Ctrl-C.

 

top - 17:03:45 up 58 days,  4:01,  1 user,  load average: 0.00, 0.02, 0.00 
Tasks: 172 total,   1 running, 171 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2% us,  0.1% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   4037036k total,  4007280k used,    29756k free,    93384k buffers


Swap:  8385888k total,    71536k used,  8314352k free,  3068240k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
27167 oracle    16   0 2011m 490m 483m S    1 12.4   0:46.93 oracle                                                                
27175 oracle    15   0 2011m 517m 510m S    1 13.1   0:49.78 oracle                                                                
 5003 oracle    15   0 2021m  33m  29m S    0  0.9   3:56.10 oracle                                                                
    1 root      16   0  4756  552  460 S    0  0.0   0:09.31 init                                                                  
    2 root      RT   0     0    0    0 S    0  0.0   0:00.47 migration/0                                                            
   ...............................

 

第一行(top):

top - 17:03:45 up 58 days,  4:01,  1 user,  load average: 0.00, 0.02, 0.00 
    “17:03:45”为系统当前时刻;
    “58 days,  4:01”为系统启动后到现在的运作时间;
    “1 user”为当前登录到系统的用户,更确切的说是登录到用户的终端数--同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
    “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU数目时,CPU将比较吃力的负载当前系统所包含的进程;

第二行(Tasks):
    “172 total”为当前系统进程总数;
    “1 running”为当前运行中的进程数;
    “171 sleeping”为当前处于等待状态中的进程数;
    “0 stoped”为被停止的系统进程数;
    “0 zombie”为僵死的进程数;

第三行(Cpus):
  
显示CPU利用率的详细信息如果有多个CPU,屏幕将在每行显示一个CPU的信息。

 

第四行(Mem):
  
显示可用的和已利用的内存

 

第五行(Swap):
    表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。(了解swap的用途就能够明白了因为swap分区是用来作实际物理内存交换用的。)

其余的显示内容以表格格式显示进程。下面对各列进行解释:

描述

PID            进程的进程ID

USER          运行该进程的用户

PRI           进程的优先级

NI             nice值:该值越高,任务的优先级越低

SIZE          该进程使用的内存(+数据+堆栈)

RSS           该进程使用的物理内存

SHARE         该进程使用的共享内存

STAT  该进程的状态,用代码显示。一些主要的状态代码包括:
R
— 正在运行
S
— 正在休眠
Z
— 迟滞
T
— 已停止

您还会看到第二个和第三个字符,它们表示:
W
— 已换出的进程
N
— 正nice

%CPU          该进程使用的CPU百分比

%MEM          该进程使用的内存百分比

TIME          该进程使用的总CPU时间

CPU           如果这是一个多处理器系统,该列指明正在其上运行进程的CPUID

COMMAND        该进程发出的命令

 

top运行中可以通过top的内部命令对进程的显示方式进行控制。内部命令如下:

  s -改变画面更新频率
  l -关闭或开启第一部分第一行top信息的表示
  t -关闭或开启第一部分第二行Tasks和第三行Cpus信息的表示
  m -关闭或开启第一部分第四行Mem和第五行Swap信息的表示
  N -PID的大小的顺序排列表示进程列表

    P -CPU占用率大小的顺序排列进程列表  

   M -以内存占用率大小的顺序排列进程列表
  h -显示帮助
  n -设置在进程列表所显示进程的数量
  q -退出top



Cpu(s):  0.2% us,  0.1% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
补充:
CPU Utilization
CPU Utilization,一个很直观的概念,在任意时间内,CPU有7个状态:
1.idle,表示CPU闲置并等待工作分配.
2.user,表示CPU在运行用户的进程
3.system,表示CPU在执行kernel工作
4.nice, 表示CPU花费在被nice改变过优先级的process上的时间(注意:被nice命令改变优先级的process仅指那些nice值为负的 process.花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,因此整个时间加起来可能会超过百分之百)
5.iowait,表示CPU等待IO操作完成的时间
6.irq,表示CPU开销在响应硬中断上的时间
7.softirq,表示CPU开销在响应软中断上的时间.
我们一般用vmstat看到的都是四个状态:sy,us,id,wa,通过他和load avg结合,基本可以知道cpu的状态

us -> User         表示CPU在运行用户的进程
sy -> system       表示CPU在执行kernel工作
ni -> nice         表示CPU花费在被nice改变过优先级的process上的时间
id -> idle         表示CPU闲置并等待工作分配.
wa -> iowait       表示CPU等待IO操作完成的时间 %wa高,说明磁盘忙。譬如磁盘读写次数非常高。
hi -> H/w interrupt requests  硬件中断
si -> S/w interrupt requests  软件中断 %si高,是否说明软中断忙.进程之间频繁切换导致!

这种对应映射关系如示!

[介绍一篇文章]

将两个%si高的项目监控结果如下:

----------------------------------------------------------------------
项目A,大压力下场景执行2分钟:

测试前:(未执行测试时,查询前端[服务器C]的数据)
context :11608691780
irq 0: 377348704 timer
irq 14: 41845647 ide0
irq 58:2557376548 0
irq233: 69455022 ioc0

问题环境:(接口配置在[服务器G]时,查询前端[服务器C]的数据)
context :11609397277          差值:705497
irq 0: 377651500 timer         差值:302796
irq 14: 41848329 ide0          差值:2682
irq 58:2557728212 0             差值:351664
irq233: 69457769 ioc0          差值:2747

正常环境:(接口配置在[服务器E]时,查询前端[服务器C]的数据)
context :11611152447          差值:1755170
irq 0: 378089297 timer         差值:437797
irq 14: 41852253 ide0          差值:3924
irq 58:2558490578 0             差值:762366
irq233: 69506181 ioc0         差值:48412

----------------------------------------------------------------------

项目B,大压力下场景执行2分钟:

测试前:(未执行测试时,[服务器E]的数据)
context :365586128
irq 0: 555887117 timer
irq 14:   4970216 ide0
irq 98:   6673200 0
irq233:   2963048 ioc0

正常环境:(数据库连接池设置为 localhost )
context :368023507              差值:2437379
irq 0: 556101285 timer         差值:214168
irq 14:   4972124 ide0          差值:1908
irq 98:   7013268 0               差值:340068
irq233:   2968985 ioc0         差值:5937

问题环境:(数据库连接池设置为本机的IP地址)
context :369679349              差值:1655842
irq 0: 556446790 timer         差值:345505
irq 14:   4975148 ide0            差值:3024
irq 98:   7298545 0                 差值:285277
irq233:   2974283 ioc0         差值:5298

----------------------------------------------------------------------

正常环境,指%si值在正常范围内波动。问题环境指%si异常,一般%si会达到70%~95%。差值是对应设备在测试过程中产生的中断数。
正常环境下的中断数比异常情况下的中断数更高。说明:
   计算机在单位有能力处理更多的中断数量,中断数量多并不代表%si高。
   进一步说明了:%si高代表CPU等待软中断完成的时间更高。
结合项目B的实际情况,将LAMP的Mysql连接方式置为永久连接(长连接),%si就不会高了:
1. 说明PHP在连接Mysql在使用localhost连接时不走网络,进程间切换就不废劲,CPU无需等待;
2. 而PHP在使用IP地址进行连接时,进程间切换比较耗费资源,导致CPU等待;
3. 进程间切换就会产生中断,则CPU等待切换就是CPU在等待软中断处理完成。

原文:http://space.itpub.net/10640532/viewspace-567348
阅读(866) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~