linux包之procps之vmstat命令
概述
[root@localhost ~]# rpm -qf /usr/bin/vmstat
procps-3.2.8-25.el6.x86_64
vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下文切换、CPU使用等。对于 Linux 的性能分析,
100%理解 vmstat 输出内容的含义,并能灵活应用,那对系统性能分析的能力就算是基本掌握了。
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,
一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
解释
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:# vmstat 2 1
vmstat的输出分为以下几种模式:
(1)、VM MODE (普通选项)
(2)、DISK MODE(-d选项)
(3)、DISK PARTITION MODE(-p选项)
(4)、SLAB MODE (-m选项)
对输出解释如下:
1)procs
a.r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
b.b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
2)memory
a、swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
b、free列表示当前空闲的物理内存数量(以KB为单位);
c、buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
作为buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
d、cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。 Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。 2. Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。 Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。
Processor Number i5-4460
Cache 6 MB SmartCache
Disk Model=ST1000DM003-1ER162
cache buffer 64MB
http://www.bubuko.com/infodetail-146169.html buffer与cache
3)swap
a、si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
b、so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
c、一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存
4)IO
a、bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
b、bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)
这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。
5)system
a、in列表示在某一时间间隔中观察到的每秒设备中断数;
b、cs列表示每秒产生的上下文切换次数。
上面这两个值越大,会看到内核消耗的CPU时间就越多。
6)CPU
a、us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
b、sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
c、id列显示了CPU处在空闲状态的时间百分比;
d、wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
e、st列一般不关注,虚拟机占用的时间百分比。 (Linux 2.6.11)
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间。
样例:
[root@localhost ~]# vmstat -f -f 显示自开机以来forks的总数,包括fork、vfork和clone system calls,总数和tasks创建的数量是一致的。
[root@localhost ~]# vmstat -a -a 显示 活动(active)和 非活动(inactive)的内存。
[root@rac01 ~]# vmstat -s -s 显示各种事件计数器表和内存统计信息
[root@rac01 ~]# vmstat -d -d 显示磁盘数据(disk statistics)
[root@rac01 ~]# vmstat -D -D 显示磁盘统计表(disk table)
[root@rac01 ~]# vmstat -p /dev/sda2 2 -p 分区 显示磁盘分区数据
[root@rac01 ~]# vmstat -S k 2 -S 单位
[root@CentOS5 ~]# vmstat -m 与下面的命令类似
Cache Num Total Size Pages
size-32 4018 4068 32 113
[root@CentOS5 ~]# slabtop
[root@CentOS5 ~]# ll /proc/slabinfo
[root@CentOS5 ~]# vmstat -p /dev/sdb1 2 -n 不重复显示标题头,只显示一次
sdb1 reads read sectors writes requested writes
1129843 23753591 264152 37455672
1129844 23753599 264153 37455688
1129844 23753599 264157 37455800
1129845 23753607 264173 37456104
1129845 23753607 264175 37456136
案例
开发人员报告系统运行缓慢,影响用户访问.
流程与步骤 登录相关故障主机
1.top查看看到负载较高
top - 15:58:54 up 34 days, 35 min, 2 users, load average: 5.54, 5.35, 5.09
2.vmstat查看
[root@CentOS5 ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 9 77580 52532 3512 1066464 0 0 6 57 6 3 1 0 99 0 0
0 11 77580 54268 3436 1064712 0 0 1324 5516 1158 498 49 6 0 46 0
0 8 77580 54264 3456 1064956 0 0 966 3176 1095 349 6 2 0 93 0
20 8 77580 54572 3372 1064492 0 0 682 7406 1148 596 59 7 0 35 0
1 10 77580 53736 3300 1064772 0 0 2190 11894 1268 1270 84 13 0 2 0
2 9 77580 54968 3172 1062376 0 0 852 12480 1116 361 88 11 0 2 0
0 6 77580 52228 3180 1065692 0 0 840 5994 1123 548 52 6 0 42 0
20 9 77580 54108 3200 1063668 0 0 940 5488 1112 487 54 7 0 40 0
4 10 77580 51588 3244 1066748 0 0 454 6752 1081 317 51 6 0 43 0
1 8 77580 54732 2840 1063384 0 0 944 12140 1130 582 77 12 0 11 0
0 10 77580 55488 2596 1057480 0 0 1044 33282 1082 201 3 4 0 94 0
1 8 77580 56696 2664 1058312 0 0 466 18 1223 415 2 1 0 97 0
0 9 77580 56736 2728 1062004 0 0 708 1540 1154 417 7 2 0 91 0
1 7 77580 53676 2780 1065040 0 0 1552 6840 1152 748 78 11 0 12 0
5 8 77580 52828 2768 1065776 0 0 3088 2958 1301 939 18 3 0 79 0
5 8 77580 54844 2808 1063516 0 0 1168 7900 1142 803 89 11 0 0 0
3.iostat查看
[root@CentOS5 ~]# iostat 1
avg-cpu: %user %nice %system %iowait %steal %idle
24.62 0.00 2.51 72.86 0.00 0.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
sda1 0.00 0.00 0.00 0 0
sda2 0.00 0.00 0.00 0 0
sda3 0.00 0.00 0.00 0 0
sdb 259.30 5953.77 3320.60 11848 6608
sdb1 259.30 5953.77 3320.60 11848 6608
dm-0 678.39 6082.41 3320.60 12104 6608
4.iostat查看
[root@CentOS5 ~]# iostat -xN 1
Linux 2.6.18-194.el5 (CentOS5) 2014年05月17日
avg-cpu: %user %nice %system %iowait %steal %idle
2.24 0.05 0.46 5.22 0.00 92.03
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.21 1.61 0.48 0.73 12.21 18.72 25.61 0.02 15.94 6.99 0.84
sda1 0.01 0.00 0.00 0.00 0.03 0.00 30.51 0.00 15.86 12.73 0.00
sda2 0.12 0.38 0.02 0.01 1.10 3.10 132.98 0.00 38.78 32.13 0.10
sda3 0.08 1.23 0.45 0.72 11.07 15.62 22.72 0.02 15.33 6.57 0.77
sdb 0.35 73.18 18.65 4.47 392.15 621.19 43.83 0.22 9.48 2.96 6.85
sdb1 0.35 73.18 18.65 4.47 392.13 621.19 43.83 0.22 9.48 2.96 6.85
datavg-oracle 0.00 0.00 18.99 77.65 392.12 621.19 10.49 3.84 39.72 0.71 6.85
5.ps查看
[root@CentOS5 ~]# ps aux|grep oracle
[root@CentOS5 ~]# ps -ef|grep ora|wc -l
127
[root@CentOS5 ~]# ps aux|grep D
6.fuser查看
[root@CentOS5 ~]# fuser -vm /oracle
USER PID ACCESS COMMAND
/oracle: oracle 2859 F..e. tnslsnr
oracle 2926 F.ce. oracle
oracle 2928 F.ce. oracle
oracle 2930 F.ce. oracle
oracle 2932 F.ce. oracle
oracle 2934 F.ce. oracle
oracle 2936 F.ce. oracle
oracle 2938 F.ce. oracle
oracle 2940 F.ce. oracle
oracle 2942 F.ce. oracle
oracle 2944 F.ce. oracle
linux包之procps之vmstat命令的更多相关文章
- linux包之procps之sysctl命令
概述 [root@localhost ~]# rpm -qf /sbin/sysctlprocps-3.2.8-25.el6.x86_64 我们常常在 Linux 的 /proc/sys 目录下,手动 ...
- linux包之procps之pmap命令
名称: pmap - report memory map of a process(查看进程的内存映像信息)用法 pmap [ -x | -d ] [ -q ] pids... ...
- linux包之iproute之ss命令
概述 [root@localhost ~]# rpm -qa|grep iprouteiproute-2.6.32-31.el6.x86_64 当服务器的socket连接数量变得非常大时,无论是使用n ...
- #linux包之sysstat之iostat命令
概述 对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量.系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈.同vmstat一样,iost ...
- #linux包之tcpdump之tcpdump命令
概述 man tcpdump 已阅 yum install tcpdump Downloading Packages:(1/2): libpcap-1.4.0-1.20130826git2dbcaa1 ...
- Linux性能监控top及vmstat命令
监控的工具---top 第一行: 03:07:27 当前系统时间 3 days, 18:58 系统已经运行了3天18小时58分钟(在这期间没有重启过) 4 users load average: 0. ...
- linux包之gdb之gdb命令与core文件产生
gdb-7.2-64.el6_5.2.x86_64/usr/bin/gcore/usr/bin/gdb/usr/bin/gdb-add-index/usr/bin/gdbtui/usr/bin/gst ...
- linux包之iproute之ip命令
[root@localhost ~]# rpm -qf /sbin/ipiproute-2.6.32-31.el6.x86_64ip 是个命令, ip 命令的功能很多!基本上它整合了 ifconfig ...
- linux包之procps之ps与top
概述 阅读man ps页,与man top页,最权威与标准,也清楚 有时候系统管理员可能只关心现在系统中运行着哪些程序,而不想知道有哪些进程在运行.由于一个应用程序可能需要启动多个进程.所以在同等情况 ...
随机推荐
- Add a stylesheet link programmatically in ASP.NET
Here’s a code snippet used to programmatically insert a stylesheet link to an external CSS file: // ...
- yii2 生成PDF格式的文件
1 .先把mpdf-development.zip解压的类文件夹放到vendor目录里面,重命名为mpdf 2 .在vendor/composer/autoload_namespaces.php里面添 ...
- JQuery源码分析(四)
jQuery多库共存处理 多库共存换句话说可以叫无冲突处理. 总的来说会有2种情况会遇到: 1.$太火热,jQuery采用$作为命名空间,不免会与别的库框架或者插件相冲突. 2.jQuery版本更新太 ...
- To and Fro
Description Mo and Larry have devised a way of encrypting messages. They first decide secretly on th ...
- Smart20学习记录----异步通知
异步通知: 阻塞与非阻塞访问.poll()函数提供了较好地解决设备访问的机制(应用程序主动访问) 异步通知:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件 ...
- magento启用SSL改http成https
Magento是电子商务网站,对于网站的用户信息安全来说,让Magento使用SSL连接是一个很好的解决方案.如果在页面的边栏或者底部放上些表明本站使用安全连接的图片,显得更专业,让客户有安全感,对于 ...
- EXT遮罩效果
<link href="/resources/ext/resources/css/ext-all.css" rel="stylesheet" type=& ...
- lhgdialog 与后台交互的对话框
官网:http://www.lhgdialog.com/ 1. 调用打开dialog的按钮 <span class="txtdec fs10 open"> <a ...
- Java 有理数类 分数类 Rational类的设计与实现
要实现Rational类的加减乘除,要实现其可比较性,要覆盖toString()方法,要实现不同数据类型的转换等. package chapter14; public class Rational e ...
- 总结 output 用法
第一种用法 返回受 INSERT.UPDATE 或 DELETE 语句影响的每行的信息,或者返回基于上述每行的表达式.这些结果可以返回到处理应用程序, 以供在确认消息.存档以及其他类似的应用程序要求中 ...