一、vmstat命令
1、简介
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果。
2、命令格式
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
3、常用选项
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
-d:显示磁盘数据。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。
-D 显示磁盘统计表
4、应用举例
4.1、以M为单位每两秒输出一次结果并执行三次输出:
[root@hpf-linux ~]# vmstat -S M 2 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 689 38 195 0 0 8 1 12 16 0 0 100 0 0 0 0 0 689 38 195 0 0 0 0 13 16 0 0 100 0 0 0 0 0 689 38 195 0 0 0 0 13 14 0 0 100 0 0
说明:
Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间)
wa: 等待IO时间
应用举例: 如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。如果si,so 长期不等于0,表示内存不足。如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
4.2、以M为单位显示活跃和非活跃内存:
[root@hpf-linux ~]# vmstat -a -S M 2 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free inact active si so bi bo in cs us sy id wa st 0 0 0 689 114 169 0 0 8 1 12 16 0 0 100 0 0 0 0 0 689 114 169 0 0 0 0 13 15 0 0 100 0 0 0 0 0 689 114 169 0 0 0 0 13 15 0 0 100 0 0
使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。
说明:
Memory(内存):
inact: 非活跃内存大小(当使用-a选项时显示)
active: 活跃的内存大小(当使用-a选项时显示)
4.3、查看系统内存使用详细信息:
[root@hpf-linux ~]# vmstat -S M -s 1006 M total memory 316 M used memory 169 M active memory 114 M inactive memory 689 M free memory 38 M buffer memory 195 M swap cache 1999 M total swap 0 M used swap 1999 M free swap 1741 non-nice user cpu ticks 47 nice user cpu ticks 1265 system cpu ticks 2883445 idle cpu ticks 2391 IO-wait cpu ticks 22 IRQ cpu ticks 2238 softirq cpu ticks 0 stolen cpu ticks 239562 pages paged in 28430 pages paged out 0 pages swapped in 0 pages swapped out 358226 interrupts 472296 CPU context switches 1437106177 boot time 1677 forks
这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。
4.4、查看/dev/sda1磁盘的读/写:
[root@hpf-linux ~]# vmstat -S M -p /dev/sda1 sda1 reads read sectors writes requested writes 507 4004 7 28
说明:
reads:来自于这个分区的读的次数。
read sectors:来自于这个分区的读扇区的次数。
writes:来自于这个分区的写的次数。
requested writes:来自于这个分区的写请求次数。
4.5、查看系统中所有磁盘的读写:
[root@hpf-linux ~]# vmstat -S M -d disk- ------------reads------------ ------------writes----------- -----IO------ total merged sectors ms total merged sectors ms cur sec sr0 33 0 264 7 0 0 0 0 0 0 sda 7732 5829 469716 44808 3420 3731 57180 18212 0 40 sdb 552 641 3752 403 0 0 0 0 0 0 sdc 220 36 1552 34 0 0 0 0 0 0 dm-0 93 0 744 29 0 0 0 0 0 0
merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作。
二、free命令
1、简介
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
2、常用选项
-k:以KB为单位显示内存使用情况,默认不加选项就是以KB为单位;
-m:以MB为单位显示内存使用情况;
-g: 以GB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列
3、应用举例
以MB为单位显示内存和总和列:
[root@hpf-linux ~]# free -m -t total used free shared buffers cached Mem: 1006 316 689 0 38 195 -/+ buffers/cache: 82 924 Swap: 1999 0 1999 Total: 3006 316 2689
三、iostat命令
1、简介
iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
2、常用选项
-c:仅显示CPU使用情况;
-d:仅显示设备利用率;
-k:显示状态以千字节每秒为单位,而不使用块每秒;
-m:显示状态以兆字节每秒为单位;
-p:仅显示块设备和所有被使用的其他分区的状态;
-t:显示每个报告产生时的时间;
-x:显示扩展状态。
3、应用举例
iostat命令的安装包为sysstat,安装玩后同时还会生成下面几个监控的命令,里面的sar命令在后面还会介绍。
/usr/bin/cifsiostat /usr/bin/iostat /usr/bin/mpstat /usr/bin/pidstat /usr/bin/sadf /usr/bin/sar
3.1、iostat命令一个像vmstat命令一样以几秒刷新一次一共刷新n次的方法输出,为了节省不必要的篇幅就不列举了,先介绍下-t、-k选项的使用及说明:
[root@hpf-linux ~]# iostat -t -k Linux 2.6.32-504.el6.i686 (hpf-linux) 2015年07月17日 _i686_(1 CPU) 2015年07月17日 21时43分03秒 //-t显示此时间 avg-cpu: %user %nice %system %iowait %steal %idle 0.07 0.00 0.12 0.07 0.00 99.74 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn //-k以KB为单位显示 scd0 0.00 0.00 0.00 132 0 sda 0.36 6.88 1.17 236234 40354 sdb 0.02 0.05 0.00 1876 0 sdc 0.01 0.02 0.00 776 0 dm-0 0.00 0.01 0.00 372 0
说明:
cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源CPU。
tps:该设备每秒的传输次数。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是0.36,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)
3.2、显示磁盘的扩展状态:
[root@hpf-linux ~]# iostat -x Linux 2.6.32-504.el6.i686 (hpf-linux) 2015年07月17日 _i686_(1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.07 0.00 0.12 0.07 0.00 99.74 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util scd0 0.00 0.00 0.00 0.00 0.01 0.00 8.00 0.00 0.21 0.21 0.00 sda 0.17 0.16 0.23 0.13 13.84 2.36 44.69 0.00 5.74 3.48 0.13 sdb 0.02 0.00 0.02 0.00 0.11 0.00 6.80 0.00 0.73 0.68 0.00 sdc 0.00 0.00 0.01 0.00 0.05 0.00 7.05 0.00 0.15 0.15 0.00 dm-0 0.00 0.00 0.00 0.00 0.02 0.00 8.00 0.00 0.31 0.31 0.00
说明:
disk属性值说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。
在上面的命令中若单独使用-d选项就不会显示CPU的信息,若使用-c选项则只会显示CPU的信息,同时也可以指定硬盘分区,这里就不多做介绍了。
本文出自 “粗茶淡饭” 博客,请务必保留此出处http://cuchadanfan.blog.51cto.com/9940284/1675940
原文地址:http://cuchadanfan.blog.51cto.com/9940284/1675940