一、vmstat
[root@node2 ~]# vmstat 2 1 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 343228 8952 43660 0 0 5 1 11 10 0 0 100 0 0
介绍一下vmstat的常用方法,第一个参数为采样的时间间隔,第二个参数为采样的次数。
[root@node2 ~]# 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 0 0 0 340616 9292 45460 0 0 5 1 11 10 0 0 100 0 0 0 0 0 340600 9292 45460 0 0 0 0 13 11 0 0 100 0 0 0 0 0 340600 9292 45460 0 0 0 0 10 11 0 0 100 0 0 0 0 0 340476 9292 45460 0 0 0 2 12 16 0 0 100 0 0 0 0 0 340476 9292 45460 0 0 0 0 11 11 0 1 100 0 0
以上为每隔2秒进行采样,没指定次数则会一直进行,ctrl+c结束采样。下面我们来说下各个参数的意义。
r:表示等待CPU资源的进程数,当这个数目超过CPU个数,则系统在CPU上有性能瓶颈。 b:表示有几个进程因等待IO而阻塞了,在高并发的传统模型的web服务器上,这点可能是瓶颈。 swpd:表示使用的swpd内存量,当使用到swpd时,表示你的物理内存不足了。 free:剩余的物理内存量,我这边剩余340M。 buff:Linux系统使用一定量的内存来作为IO的缓冲,buff用于储存文件的元数据,如目录内容,文件权限。 cache:cache用于缓存打开的文件。 si:每秒从交换区写入内存的大小(单位:kb/s) so:每秒从内存写到交换区的大小(单位:kb/s) bi:每秒读取的块数 bo:每秒写入的块数 in:每秒CPU的中断数,包括时间中断 cs:上下文切换次数:调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目。 us:用户空间占据的CPU时间 sy:内核空间占据的CPU时间,这个时间偏长一般是消耗在IO上。 wa:等待IO的CPU时间。 st:被偷走的时间,不知道为什么被偷走了,cpu神偷。
二、top
正常情况下直接使用top命令就可以了,如果你不想要top占据前台,可以使用top -n 。top是个交互式的命令,我们可以在top窗口对top进行调整。下面先介绍一下top显示的内容
第一行为uptime:
[root@node2 ~]# uptime 15:26:14 up 4:05, 3 users, load average: 0.00, 0.00, 0.00
第一列:当前时间 第二列:系统运行时间 第三列:登录的用户数 第四列:平均队列长度,即负载。时间为1分钟、5分钟、15分钟。
第二、三行为CPU信息:
注意,当CPU为多个的时候,这边可能有多行,显示为Cpu(s)时为平均值,按“1”键可以展开。
82 total:进程总数 1 running:运行的进程数 81 sleeping:休眠的进程数 0 stopped:停止的进程数 0 zombie:僵死的进程数 0.3% us :用户空间占用CPU百分比 1.0% sy :内核空间占用CPU百分比 0.0% ni :用户进程空间内改变过优先级的进程占用CPU百分比 98.7% id :空闲CPU百分比 0.0% wa :等待输入输出的CPU时间百分比 0.0%hi:硬件CPU中断占用百分比 0.0%si:软中断占用百分比 0.0%st:被偷走的CPU时间
第四、五行为内存信息:
Mem:
191272k total 物理内存总量 173656k used 使用的物理内存总量 17616k free 空闲内存总量 22052k buffers 用作内核缓存的内存量
Swap:
192772k total 交换区总量 0k used 使用的交换区总量 192772k free 空闲交换区总量 123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
下面显示的内容为
序号 列名 含义 a PID 进程id b PPID 父进程id c RUSER Real user name d UID 进程所有者的用户id e USER 进程所有者的用户名 f GROUP 进程所有者的组名 g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? h PR 优先级 i NI nice值。负值表示高优先级,正值表示低优先级 j P 最后使用的CPU,仅在多CPU环境下有意义 k %CPU 上次更新到现在的CPU时间占用百分比 l TIME 进程使用的CPU时间总计,单位秒 m TIME+ 进程使用的CPU时间总计,单位1/100秒 n %MEM 进程使用的物理内存百分比 o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA r CODE 可执行代码占用的物理内存大小,单位kb s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb t SHR 共享内存大小,单位kb u nFLT 页面错误次数 v nDRT 最后一次写入到现在,被修改过的页面数。 w S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) x COMMAND 命令名/命令行 y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 z Flags 任务标志,参考 sched.h
上面的内容可以在top交互命令下,按F进行选择需要显示的内容。按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
top可以使用的参数:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 p:通过指定监控进程ID来仅仅监控某个进程的状态。 S: 指定累计模式 s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i: 使top不显示任何闲置或者僵死进程。 c:显示整个命令行而不只是显示命令名
在交互环境下使用:
h或者? :显示帮助画面,给出一些简短的命令总结说明。 k:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 i :忽略闲置和僵死进程。这是一个开关式命令。 q:退出程序。 r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 S:切换到累计模式(不知道干嘛的) d: 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。 f或者F:从当前显示中添加或者删除项目。 o或者O:改变显示项目的顺序。 l:切换显示平均负载和启动时间信息。 m:切换显示内存信息。 t:切换显示进程和CPU状态信息。 c:切换显示命令名称和完整命令行。 M:根据驻留内存大小进行排序。 P:根据CPU使用百分比大小进行排序。 T:根据时间/累计时间进行排序。 W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
三、mpstat
其实讲完了上面2个命令,CPU啊、内存啊、IO啊查看都没什么问题了,下面在讲一下mpstat的常用方法。
[root@node2 ~]# mpstat -p ALL 用法: mpstat [ 选项 ] [ <时间间隔> [ <次数> ] ]
[root@node2 ~]# mpstat -P ALL 1 10 Linux 2.6.32-279.el6.x86_64 (node2.buranle.com) 2015年07月29日 _x86_64_ (1 CPU) 16时10分22秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 16时10分23秒 all 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00 16时10分23秒 0 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00
字段的含义如下:
%user 在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 (usr/total)*100 %nice 在internal时间段里,nice值为负进程的CPU时间(%) (nice/total)*100 %sys 在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
四、iostat
[root@node2 ~]# iostat --help 用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
通常使用的方法:
[root@node2 ~]# iostat -d -k 2 Linux 2.6.32-279.el6.x86_64 (node2.buranle.com) 2015年07月29日 _x86_64_ (1 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.42 7.14 2.68 126231 47478 dm-0 0.93 6.88 2.68 a 121641 47464 dm-1 0.02 0.07 0.00 1188 0
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。
参数的含义:
tps:该设备每秒的传输次数。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。 kB_read/s:每秒从设备(drive expressed)读取的数据量; kB_wrtn/s:每秒向设备(drive expressed)写入的数据量; kB_read:读取的总数据量; kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据。
[root@node2 ~]# iostat -d -k -x 2 Linux 2.6.32-279.el6.x86_64 (node2.buranle.com) 2015年07月29日 _x86_64_ (1 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.09 0.49 0.24 0.17 7.08 2.67 47.03 0.01 14.38 4.42 0.18 dm-0 0.00 0.00 0.26 0.67 6.82 2.67 20.48 0.08 91.01 1.95 0.18 dm-1 0.00 0.00 0.02 0.00 0.07 0.00 8.00 0.00 2.60 1.13 0.00
参数的含义:
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。 rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。 rKB/s:The number of read requests that were issued to the device per second; wKB/s:The number of write requests that were issued to the device per second; avgrq-sz 平均请求扇区的大小avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。 await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。 svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。 %util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
其他的如free、iotop等就不一一介绍了,参数的解释项主要来源于网络结合自己的理解进行了稍微的修改。
原文地址:http://buranle.blog.51cto.com/8870751/1679653