一、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

wKioL1W4gP_gShpNAAPcUucl4PQ663.jpg

       正常情况下直接使用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 可以将相应的列向左移动。最后按回车键确定。
按大写的 FO 键,然后按 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等就不一一介绍了,参数的解释项主要来源于网络结合自己的理解进行了稍微的修改。