分类:
2011-12-17 12:12:59
1、vmstat
procs ———–memory———- —swap– —–io—- –system– —-cpu—-
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 112 18196 33948 452648 0 0 79 109 1057 1141 7 1 89 3
0 0 112 18196 33956 452648 0 0 0 60 1060 1541 9 1 90 0
0 0 112 18196 33956 452648 0 0 0 0 1292 1722 4 1 95 0
0 0 112 18196 33956 452648 0 0 0 0 1088 1128 3 0 97 0
0 0 112 18196 33956 452648 0 0 0 0 1176 1678 5 1 94 0
0 0 112 18196 33956 452648 0 0 0 0 1085 1291 6 0 94 0
proc:
r表示正在运行和等待运行的进程
b表示处于不可中断的进程,一般由I/O引起
memmory:KB,反映内存的使用状况
swpd:交换到swap分区上的大小,如果此值很大,但swap中的si so较小,则可以忽略
free:空闲的物理内存
buff:作为buffer cache的内存,对块设备的读写进行缓冲
cache:作为page cache的内存, 文件系统的cache
swap:反映内存的使用量
si:由磁盘调入内存
so:由内存调入磁盘
io:反映了I/O的繁忙程度
bi:从块设备读入的数据总量速度KB/s
bo:写入到块设备的数据总量速度KB/s
system:反映了cpu的繁忙程度
in:每秒的中断次数
cs:每秒产生的上下文切换次数
cpu:
cs:用户进程消耗的CPU时间百分比,us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了(比如 PHP/Perl)
sy:内核进程消耗的CPU时间百分比,sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。
id:处在空闲状态时间百分比,id的值越大,说明CPU越空闲
wa:IO等待消耗的CPU时间百分比,wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。
2、top
$top
14:56:28 up 29 days, 43 min, 2 users, load average: 0.05, 0.02, 0.00
506 processes: 505 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 3.2% user 0.1% system 0.0% nice 0.6% iowait 95.9% idle
Mem: 686476k av, 678556k used, 7920k free, 0k shrd, 36260k buff
473568k active, 173292k inactive
Swap: 626492k av, 88692k used, 537800k free 23916k cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
12108 root 16 0 4468 1552 892 R 1.9 0.2 0:00 0 top
1 root 16 0 1464 84 60 S 0.0 0.0 0:01 0 init
2 root 34 19 0 0 0 SWN 0.0 0.0 0:00 0 ksoftirqd/0
3 root 10 -5 0 0 0 SW< 0.0 0.0 0:00 0 events/0
4 root 10 -5 0 0 0 SW< 0.0 0.0 0:00 0 khelper
9 root 10 -5 0 0 0 SW< 0.0 0.0 0:00 0 kthread
12 root 10 -5 0 0 0 SW< 0.0 0.0 0:00 0 kblockd/0
35 root 20 -5 0 0 0 SW< 0.0 0.0 0:00 0 aio/0
34 root 15 0 0 0 0 SW 0.0 0.0 0:40 0 kswapd0
602 root 10 -5 0 0 0 SW< 0.0 0.0 0:00 0 reiserfs/0
1519 root 16 0 1652 284 248 S 0.0 0.0 0:34 0 syslogd
1523 root 16 0 1580 112 108 S 0.0 0.0 0:00 0 klogd
1535 rpc 15 0 1624 12 8 S 0.0 0.0 0:00 0 portmap
1564 root 16 0 2712 200 136 S 0.0 0.0 0:00 0 sshd
通过top可以知道是哪个进程大量占用了cpu/mem的资源
用 top 看到的进程所处的几种状态(STAT列)。
D 不可中断休眠,通常是 IO 操作所处的状态
R 正在执行的或者处在等待执行的进程队列中
S 休眠中
T 暂停刮起的(比如Ctrl+Z),也可能是被 strace 命令调用中的状态
Z 僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而被init进程接管进行销毁。
W 没有使用物理内存,所占用的物理内存被切换到交换内存
< 高优先级的进程
N 低优先级
有时候一个进程会有多个状态的标志,比如SWN,SW
3、free
$free
total used free shared buffers cached
Mem: 686476 676772 9704 0 36288 24152
-/+ buffers/cache: 616332 70144
Swap: 626492 91100 535392
free命令输出的第三行(-/+ buffers/cache)
这行最容易让人迷惑。
它显示的第一个值(used这一列)是这样得来的:
Mem行used列 - Mem行buffers列 - Mem行cached列
它显示的第二个值(free这一列)是这样得来的:
Mem行free列 + Mem行buffers列 + Mem行cached列
uptime:
$uptime
15:10:55 up 29 days, 57 min, 2 users, load average: 0.00, 0.02, 0.00
反映了总体上的系统在过去1/5/15分钟的负载,
systat:
Iozone:
IO和文件系统性能测试的工具
Strace:
跟踪一个程序的执行,找出性能瓶颈
mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不 但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。下面只介绍 mpstat与CPU相关的参数,mpstat的语法如下:
mpstat [-P {|ALL}] [internal [count]]
参数的含义如下:
参数 解释
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
internal 相邻的两次采样的间隔时间
count 采样的次数,count只能和delay一起使用
当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。与CPU有关的输出的含义如下:
参数 解释 从/proc/stat获得数据
CPU 处理器ID
user 在internal时间段里,用户态的CPU时间(%) ,不包含 nice值为负 进程 usr/total*100
nice 在internal时间段里,nice值为负进程的CPU时间(%) nice/total*100
system 在internal时间段里,核心时间(%) system/total*100
iowait 在internal时间段里,硬盘IO等待时间(%) iowait/total*100
irq 在internal时间段里,软中断时间(%) irq/total*100
soft 在internal时间段里,软中断时间(%) softirq/total*100
idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%) idle/total*100
intr/s 在internal时间段里,每秒CPU接收的中断的次数 intr/total*100
CPU总的工作时间=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示当前值,_pre表示interval时间前的值。上表中的所有值可取到两位小数点。
cat /proc/stat
“ctxt”给出了自系统启动以来CPU发生的上下文的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。