zoukankan      html  css  js  c++  java
  • Linux常用监控命令

    A goal is a dream with a deadline. Much effort, much prosperity. 

    1、IOSTAT命令

    此命令安装包为sysstat     可用yum -y install sysstat

    iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

    Linux系统出现了性能问题,一般我们可以通过top.iostat,vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据

    iostat结果分析 

    [kefu@SZ-8 linux]$ iostat -x -k 
    Linux 2.6.18-128.el5_cyou_1.0 (SZ-8.30) 09/08/2011 
    
    avg-cpu: %user %nice %system %iowait %steal %idle 
    16.58 0.00 2.79 0.46 0.00 80.16 
    Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
    
    sda 0.06 29.28 0.22 37.14 10.21 265.68 14.77 0.02 0.51 0.15 0.55 
    
    sda1 0.00 0.00 0.00 0.00 0.00 0.00 10.79 0.00 2.66 2.43 0.00 
    
    sda2 0.01 0.78 0.10 0.36 0.81 4.58 23.51 0.00 1.21 0.84 0.04 
    
    sda3 0.03 15.17 0.09 35.39 8.98 202.24 11.91 0.01 0.26 0.12 0.44 
    
    sda4 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 33.33 33.33 0.00 
    
    sda5 0.01 1.59 0.03 0.51 0.34 8.40 32.20 0.00 1.19 0.58 0.03 
    
    sda6 0.00 0.00 0.00 0.12 0.00 0.48 8.18 0.00 5.02 4.53 0.05 
    
    sda7 0.00 0.00 0.00 0.00 0.00 0.00 45.00 0.00 5.52 3.04 0.00 
    
    sda8 0.00 0.00 0.00 0.00 0.00 0.00 40.88 0.00 7.62 6.03 0.00 
    
    sda9 0.00 0.00 0.00 0.00 0.00 0.00 39.71 0.00 7.37 5.83 0.00 
    
    sda10 0.00 0.00 0.00 0.00 0.00 0.00 37.57 0.00 5.70 3.54 0.00 
    
    sda11 0.00 11.74 0.01 0.76 0.08 49.97 131.48 0.01 10.74 0.57 0.04 
    
    sdb 0.01 3.91 20.24 20.21 1262.95 1853.94 154.09 0.52 12.84 1.97 7.95 

    rrqm/s:每秒进行merge的读操作数目。即delta(rmerge)/s 
    wrqm/s:每秒进行merge的写操作数目。即delta(wmerge)/s 
    r/s:每秒完成的读I/O设备次数。即delta(rio)/s 
    w/s:每秒完成的写I/0设备次数。即delta(wio)/s 
    rsec/s:每秒读扇区数。即delta(rsect)/s 
    wsec/s:每秒写扇区数。即delta(wsect)/s 
    rKB/s:每秒读K字节数。是rsec/s的一半,因为每扇区大小为512字节 

    wKB/s:每秒写K字节数。是wsec/s的一半 
    avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。即delta(rsect+wsect)/delta(rio+wio) 
    avgqu-sz:平均I/O队列长度。即delta(aveq)/s/1000(因为aveq的单位为毫秒) 
    await:平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio) 
    svctm:平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio) 
    %util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。即delta(usr)/s/1000(因为use的单位为毫秒) 

    如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负载,该磁盘可能存在瓶颈。 

    比较重要的参数 
    %util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的 
    svctm:平均每次设备I/O操作的服务时间 
    await:平均每次设备I/O操作的等待时间 
    avgqu-sz:平均I/O队列长度 

    如果%util接近100%,表明I/O请求太多,I/O系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,I/O压力就比较大,读取速度有较多的wait。 
    同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间的百分比,高过30%时I/O压力高)  vmstat -d  5
    await的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。如果svctm比较接近await,说明I/O几乎没有等待时间;如果 
    await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢。 

    形象的比喻 
    r/s+w/s类似于交款人的总数 
    平均队列长度(avgqu-sz)类似于单位时间里平均排队的人数 
    平均服务时间(avctm)类似于收银员的收款速度 
    平均等待时间(await)类似于平均每人的等待时间 
    平均I/O数据(avgrq-sz)类似于平均每人所买的东西 
    I/O操作率(%util)类似于收款台前有人排队的时间比例 

    svctm一般要小于await(因为同时等待的请求的等待时间被重复计算了),svctm的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会 
    间接导致svctm的增加。await的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。如果svctm比较接近await,说明I/O几乎没有 
    等待时间;如果await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调 
    整内核elevator算法,优化应用,或者升级CPU 

    2、SAR命令

    sar命令可以通过参数单独查看系统某个局部的使用情况

    sar 命令行的常用格式:

    sar [options] [-A] [-o file] t [n]

    在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式存放在文件中,

    file 在此处不是关键字,是文件名。options 为命令行选项,sar命令的选项很多,下面只列出常用选项:

    -A:所有报告的总和。
    -u:CPU利用率
    -v:进程、I节点、文件和锁表状态。
    -d:硬盘使用报告。
    -r:没有使用的内存页面和硬盘块。
    -g:串口I/O的情况。
    -b:缓冲区使用情况。
    -a:文件读写情况。
    -c:系统调用情况。
    -R:进程的活动情况。
    -y:终端设备活动情况。
    -w:系统交换活动。
    -n: 记录网络使用情况

    默认监控: sar 5 5     //  CPU和IOWAIT统计状态 
    (1) sar -b 5 5        // IO传送速率
    (2) sar -B 5 5        // 页交换速率
    (3) sar -c 5 5        // 进程创建的速率
    (4) sar -d 5 5        // 块设备的活跃信息
    (5) sar -n DEV 5 5    // 网路设备的状态信息
    (6) sar -n SOCK 5 5   // SOCK的使用情况
    (7) sar -n ALL 5 5    // 所有的网络状态信息
    (8) sar -P ALL 5 5    // 每颗CPU的使用状态信息和IOWAIT统计状态 
    (9) sar -q 5 5        // 队列的长度(等待运行的进程数)和负载的状态
    (10) sar -r 5 5       // 内存和swap空间使用情况
    (11) sar -R 5 5       // 内存的统计信息(内存页的分配和释放、系统每秒作为BUFFER使用内存页、每秒被cache到的内存页)
    (12) sar -u 5 5       // CPU的使用情况和IOWAIT信息(同默认监控)
    (13) sar -v 5 5       // inode, file and other kernel tablesd的状态信息
    (14) sar -w 5 5       // 每秒上下文交换的数目
    (15) sar -W 5 5       // SWAP交换的统计信息(监控状态同iostat 的si so)
    (16) sar -x 2906 5 5  // 显示指定进程(2906)的统计信息,信息包括:进程造成的错误、用户级和系统级用户CPU的占用情况、运行在哪颗CPU上
    (17) sar -y 5 5       // TTY设备的活动状态
    (18) 将输出到文件(-o)和读取记录信息(-f)

    1

    oracle@oracle [/home/Oracle] sar -u 1 0 -e 16:00:00 >data.txt   //每隔1秒记录CPU的使用情况,直到15点,数据将保存到data.txt文件中。(-e 参数表示结束时间,注意时间格式:必须为hh:mm:ss格式)
    
    Linux 2.6.18-194.el5 (oracle)   10/11/2011
    
    02:20:28 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
    02:20:29 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    02:20:30 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    02:20:31 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    02:20:32 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    02:20:33 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    02:20:34 PM       all      0.00      0.00      0.25      0.00      0.00     99.75
    02:20:35 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    02:20:36 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    02:20:37 PM       all      0.25      0.00      0.00      0.00      0.00     99.75
    02:20:38 PM       all      0.00      0.00      0.00      0.00      0.00    100.00
    Average:          all      0.02      0.00      0.02      0.00      0.00     99.95

    在不使用参数的情况下,系统默认打印CPU使用情况

    %user:     CPU处在用户模式下的时间百分比。
    %system:CPU处在系统模式下的时间百分比。
    %iowait:   CPU等待输入输出完成时间的百分比。
    %idle:       CPU空闲时间百分比。
    在所有的显示中,我们应主要注意%iowait和%idle,%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

    在多CPU linux系统中,sar命令也可以为每个CPU分解该信息,采用如下命令:sar -u -P ALL 5 5

    oracle@oracle [/home/oracle] sar -u -P ALL 5 2
    Linux 2.6.18-194.el5 (oracle)   10/11/2011
    
    02:41:20 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
    02:41:25 PM       all      0.00      0.00      0.10      0.00      0.00     99.90
    02:41:25 PM         0      0.00      0.00      0.20      0.00      0.00     99.80
    02:41:25 PM         1      0.00      0.00      0.00      0.00      0.00    100.00
    02:41:25 PM         2      0.20      0.00      0.20      0.00      0.00     99.60
    02:41:25 PM         3      0.00      0.00      0.00      0.00      0.00    100.00
    
    02:41:25 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
    02:41:30 PM       all      0.00      0.00      0.05      0.00      0.00     99.95
    02:41:30 PM         0      0.00      0.00      0.00      0.00      0.00    100.00
    02:41:30 PM         1      0.00      0.00      0.00      0.00      0.00    100.00
    02:41:30 PM         2      0.00      0.00      0.00      0.00      0.00    100.00
    02:41:30 PM         3      0.00      0.00      0.00      0.00      0.00    100.0

    2使用命令 sar -v t n 

    oracle@oracle [/home/oracle] sar -v 30 5       //进程、I节点、文件和锁表状态
    Linux 2.6.18-194.el5 (oracle)   10/11/2011
    
    02:28:45 PM dentunusd   file-sz  inode-sz  super-sz %super-sz  dquot-sz %dquot-sz  rtsig-sz %rtsig-sz
    02:29:15 PM      8675      9690      7119         0      0.00         0      0.00         0      0.00
    02:29:45 PM      8676      9690      7119         0      0.00         0      0.00         0      0.00
    02:30:15 PM      8677      9690      7119         0      0.00         0      0.00         0      0.00
    02:30:45 PM      8684      9690      7126         0      0.00         0      0.00         0      0.00
    02:31:15 PM      8685      9690      7126         0      0.00         0      0.00         0      0.00
    Average:         8679      9690      7122         0      0.00         0      0.00         0      0.00

    dentunusd:在缓冲目录条目中没有使用的条目数量.
    file-nr:被系统使用的文件句柄数量.
    inode-nr:使用的索引节点数量.
    pty-nr:使用的pty数量.

    3使用命令 sar -d t n   

    oracle@oracle [/home/oracle] sar -d 30 2          //查看设备使用情况
    Linux 2.6.18-194.el5 (oracle)   10/11/2011
    
    02:30:33 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    02:31:03 PM    dev8-0     47.95  12099.97     58.38    253.56      0.08      1.74      1.03      4.95
    02:31:03 PM    dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:31:03 PM    dev8-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:31:03 PM    dev8-3     47.95  12099.97     58.38    253.56      0.08      1.74      1.03      4.95
    
    02:31:03 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    02:31:33 PM    dev8-0     38.67   9648.00     62.93    251.14      0.07      1.75      1.01      3.89
    02:31:33 PM    dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:31:33 PM    dev8-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:31:33 PM    dev8-3     38.67   9648.00     62.93    251.14      0.07      1.75      1.01      3.89

    DEV            磁盘设备
    用参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0
    tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
    rd_sec/s:每秒读扇区的次数.
    wr_sec/s:每秒写扇区的次数.
    avgrq-sz:平均每次设备I/O操作的数据大小(扇区).
    avgqu-sz:磁盘请求队列的平均长度.
    await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
    svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
    %util:I/O请求占CPU的百分比,比率越大,说明越饱


    4使用命令 sar -n t n 

    oracle@oracle [/home/oracle] sar -n ALL 5 2
    Linux 2.6.18-194.el5 (oracle)   10/11/2011
    
    02:52:49 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/ s  rxmcst/s
    02:52:54 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:54 PM      eth0    127.15    112.57  38894.41  20819.16      0.00      0.00      0.00
    02:52:54 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:54 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:49 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
    02:52:54 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:54 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:54 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:54 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:49 PM    call/s retrans/s    read/s   write/s  access/s  getatt/s
    02:52:54 PM      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:49 PM   scall/s badcall/s  packet/s     udp/s     tcp/s     hit/s    miss/s   sread/s  swrite/s saccess/s sgetatt/s
    02:52:54 PM      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:49 PM    totsck    tcpsck    udpsck    rawsck   ip-frag
    02:52:54 PM       274        99        41         0         0
    
    02:52:54 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
    02:52:59 PM        lo      0.40      0.40     20.00     20.00      0.00      0.00      0.00
    02:52:59 PM      eth0    139.00    120.60  47988.20  22587.00      0.00      0.00      0.00
    02:52:59 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:59 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:54 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/ s  rxfram/s  rxfifo/s  txfifo/s
    02:52:59 PM        lo      0.00      0.00      0.00      0.00      0.00      0.0 0      0.00      0.00      0.00
    02:52:59 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:59 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    02:52:59 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:54 PM    call/s retrans/s    read/s   write/s  access/s  getatt/s
    02:52:59 PM      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:54 PM   scall/s badcall/s  packet/s     udp/s     tcp/s     hit/s    miss/s   sread/s  swrite/s saccess/s sgetatt/s
    02:52:59 PM      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    02:52:54 PM    totsck    tcpsck    udpsck    rawsck   ip-frag
    02:52:59 PM       274        99        41         0         0
    
    Average:        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/ s  rxmcst/s
    Average:           lo      0.20      0.20      9.99      9.99      0.00      0.00      0.00
    Average:         eth0    133.07    116.58  43436.76  21702.20      0.00      0.00      0.00
    Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    Average:         sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    Average:        IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
    Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    Average:         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    Average:         sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    Average:       call/s retrans/s    read/s   write/s  access/s  getatt/s
    Average:         0.00      0.00      0.00      0.00      0.00      0.00
    
    Average:      scall/s badcall/s  packet/s     udp/s     tcp/s     hit/s    miss/s   sread/s  swrite/s saccess/s sgetatt/s
    Average:         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    Average:       totsck    tcpsck    udpsck    rawsck   ip-frag
    Average:          274        99        41         0         0
    

      

    sar提供四种不同的语法选项来显示网络信息。-n选项使用四个不同的开关:DEV、EDEV、SOCK和FULL。DEV显示网络接口信 息,EDEV显示关于网络错误的统计数据,SOCK显示套接字信息,

    FULL显示所有三个开关。它们可以单独或者一起使用。          

    字段          说明 
    IFACE        LAN接口 
    rxpck/s      每秒钟接收的数据包
    txpck/s      每秒钟发送的数据包
    rxbyt/s       每秒钟接收的字节数
    txbyt/s       每秒钟发送的字节数
    rxcmp/s    每秒钟接收的压缩数据包
    txcmp/s    每秒钟发送的压缩数据包
    rxmcst/s   每秒钟接收的多播数据包
     
    后面的只针对每一个命令做解释,不做测试

    例5:   sar -r 5 5       // 内存和swap空间使用情况
    kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
    kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
    %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
    kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
    kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
    %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.

    例6:   sar -B 5 5        // 页交换速率
    pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
    pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
    fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
    majflt/s:每秒钟产生的主缺页数.
    pgfree/s:每秒被放入空闲队列中的页个数
    pgscank/s:每秒被kswapd扫描的页个数
    pgscand/s:每秒直接被扫描的页个数
    pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数
    %vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

    例7: sar -q 5 5        // 队列的长度(等待运行的进程数)和负载的状态
    runq-sz:处于运行或就绪的进程数量
    plist-sz:现在进程的总数(包括线程).
    ldavg-1:最近一分钟的负载.
    ldavg-5:最近五分钟的负载.
    ldavg-15:最近十分钟的负载.
    平均负载和队列的数据来源于/proc/loadavg

    例8: sar -n NFS 5 5  //NFS客户端的监控
    call/s:每秒成功的RPC调用都会使call/s的值增长,比如对NFS的一次读/写.
    retrans/s:每秒重传的RPC次数,比如因为服务器的问题,产生timeout,这时客户端需要重新传输.
    read/s:每秒从NFS服务端读取的次数.
    write/s:每秒写入到NFS服务端的次数.
    access/s:每秒访问NFS的次数,比如从NFS服务端COPY文件.
    getatt/s:每秒获取NFS服务端文件属性的次数,比如ls -l /NFSSERVER/,如果NFSSERVER有300个文件,将产生300次这样的请求.

    例9: sar -b 5 5        // IO传送速率
    tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
    rtps:每秒的读请求数
    wtps:每秒的写请求数
    bread/s:每秒读磁盘的数据块数(in blocks  1 block = 512B, 2.4以后内核)
    bwrtn/s:每秒写磁盘的数据块数(in blocks  1 block = 512B, 2.4以后内核)
    一般情况下tps=(rtps+wtps)


    sar也可以监控非实时数据,通过cron周期的运行到指定目录下
    例如:我们想查看本月27日,从0点到23点的内存资源.
    sa27就是本月27日,指定具体的时间可以通过-s(start)和-e(end)来指定.
    sar -f /var/log/sa/sa27 -s 00:00:00 -e 23:00:00 -r


    关于sar的用法太多太复杂,建议先查看主要几个指标如CPU,内存,IO等(理解起累啊,好难得整理)

    3、TOP命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

    oracle@oracle [/home/Oracle] top
    
    top - 12:13:31 up 130 days, 17:36,  3 users,  load average: 0.20, 0.18, 0.58
    Tasks: 199 total,   1 running, 194 sleeping,   0 stopped,   4 zombie
    Cpu(s):  1.7%us,  0.2%sy,  0.0%ni, 97.9%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   8178424k total,  8133072k used,    45352k free,    10604k buffers
    Swap: 163838892k total,   194732k used, 163644160k free,  6791868k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    11218 oracle    15   0 5270m 5.0g 5.0g S  8.0 64.5   1:45.07 oracle
        1 root      15   0 10348  312  280 S  0.0  0.0   0:40.50 init
        2 root      RT  -5     0    0    0 S  0.0  0.0   0:01.84 migration/0
        3 root      34  19     0    0    0 S  0.0  0.0   2:35.73 ksoftirqd/0
        4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
        5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.48 migration/1
        6 root      34  19     0    0    0 S  0.0  0.0   0:14.11 ksoftirqd/1
        7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1
        8 root      RT  -5     0    0    0 S  0.0  0.0   0:00.83 migration/2
        9 root      34  19     0    0    0 S  0.0  0.0   0:16.29 ksoftirqd/2
       10 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/2
       11 root      RT  -5     0    0    0 S  0.0  0.0   0:00.77 migration/3
       12 root      34  19     0    0    0 S  0.0  0.0   0:01.23 ksoftirqd/3
       13 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/3
       14 root      10  -5     0    0    0 S  0.0  0.0   0:00.65 events/0
       15 root      10  -5     0    0    0 S  0.0  0.0   0:00.46 events/1
       16 root      10  -5     0    0    0 S  0.0  0.0   0:00.28 events/2
    

    TOP前五行统计信息

    统计信息区前五行是系统整体的统计信息。

    第一行是任务队列信息
    同 uptime  命令的执行结果:

    [root@localhost ~]# uptime
    2:13:31 up 130 days, 17:36,  3 users,  load average: 0.20, 0.18, 0.58
    其内容如下:
    2:13:31   当前时间
    up 130 days  系统运行时间,格式为时:天
    3 user  当前登录用户数
    load average: 0.20, 0.18, 0.58  系统负载,即任务队列的平均长度。 三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值。

    第二、三行为进程和CPU的信息
    当有多个CPU时,这些内容可能会超过两行。内容如下:

    Tasks: 199 total                    进程总数
    1 running                                正在运行的进程数
    194 sleeping                         睡眠的进程数
    0 stopped                               停止的进程数
    4 zombie                                 僵尸进程数
    Cpu(s): 0.3% us                    用户空间占用CPU百分比
    1.0% sy                                   内核空间占用CPU百分比
    0.0% ni                                    用户进程空间内改变过优先级的进程占用CPU百分比
    98.7% id                                  空闲CPU百分比
    0.0% wa                                  等待输入输出的CPU时间百分比
    0.0% hi
    0.0% si

    第四五行为内存信息。
    内容如下:

    Mem: 8178424k total              物理内存总量
    8133072k used                       使用的物理内存总量
    45352k free                              空闲内存总量
    10604k buffers                        用作内核缓存的内存量
    Swap: 163838892k total       交换区总量
    194732k used                         使用的交换区总量
    163644160k free                    空闲交换区总量
    6791868k cached                   缓冲的交换区总量。 
    内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入

    进程信息

    列名                                           含义
    PID                                            进程id
    PPID                                          父进程id
    RUSER                                     Real user name
    UID                                            进程所有者的用户id
    USER                                        进程所有者的用户名
    GROUP                                    进程所有者的组名
    TTY                                            启动进程的终端名。不是从终端启动的进程则显示为 ?
    PR                                             优先级
    NI                                               nice值。负值表示高优先级,正值表示低优先级
    P                                                最后使用的CPU,仅在多CPU环境下有意义
    %CPU                                      上次更新到现在的CPU时间占用百分比
    TIME                                          进程使用的CPU时间总计,单位秒
    TIME+                                        进程使用的CPU时间总计,单位1/100秒
    %MEM                                       进程使用的物理内存百分比
    VIRT                                           进程使用的虚拟内存总量,单位kb
    VIRT=SWAP+RESSWAP       进程使用的虚拟内存中,被换出的大小,单位kb。
    RES                                           进程使用的、未被换出的物理内存大小,单位kb
    RES=CODE+DATACODE     可执行代码占用的物理内存大小,单位kb
    DATA                                         可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
    SHR                                           共享内存大小,单位kb
    nFLT                                          页面错误次数
    nDRT                                        最后一次写入到现在,被修改过的页面数。
    S                                                进程状态。
                                                       D=不可中断的睡眠状态
                                                       R=运行
                                                       S=睡眠
                                                       T=跟踪/停止
                                                       Z=僵尸进程
    COMMAND                              命令名/命令行
    WCHAN                                   若该进程在睡眠,则显示睡眠中的系统函数名
    Flags                                        任务标志,参考 sched.h
     
    TOP的参数解析

    参数: 
    -d : 后面可以接秒数,就是整个程序画面更新的秒数。预设是 5秒; 
    -b : 以批次的方式执行 top ,还有更多的参数可以使用喔!  
              通常会搭配数据流重导向来将批次的结果输出成为档案。 
    -n : 与 -b 搭配,意义是,需要进行几次 top 的输出结果。 
    -p : 指定某些个 PID来进行观察监测而已。 
              在 top 执行过程当中可以使用的按键指令: 
    ? :  显示在 top 当中可以输入的按键指令; 
    P:   以 CPU的使用资源排序显示; 
    M:   以 Memory 的使用资源排序显示; 
    N:   以 PID来排序喔! 
    T:   由该 Process 使用的 CPU时间累积 (TIME+) 排序。 
    k :   给予某个 PID一个讯号 (signal) 
    r :   给予某个 PID重新制订一个 nice 值。


    范例1每两秒钟更新一次   oracle@oracle [/home/oracle] top -d 2
    范例2将结果输出到/tmp/top.txt         oracle@oracle [/home/oracle] top -b -n 2 > /tmp/top.txt 
    范例3假设10218是一个已经存在的pid,观察该进程

    oracle@oracle [/home/oracle] top -d 2 -p 11218
    top - 12:53:23 up 130 days, 18:15,  3 users,  load average: 0.24, 0.18, 0.21
    Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
    Cpu(s):  3.1%us,  2.9%sy,  0.0%ni, 93.4%id,  0.5%wa,  0.0%hi,  0.1%si,  0.0%st
    Mem:   8178424k total,  8128604k used,    49820k free,    10460k buffers
    Swap: 163838892k total,   194732k used, 163644160k free,  6781040k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    11218 oracle    15   0 5270m 5.0g 5.0g S 10.5 64.5   5:18.06 oracle

    top命令一般只用来简单的查看一下cpu和内存使用,看看你自己的进程占用的高不高,另外注意看看那个load averge负载,负载高不高什么的,一般零点几就没什么问题的。而且正常要压力

    起来的时候,你的进程的cpu和内存使用会很高的,但如果没有压力他也很高,那就有问题了。 
    另外的注意看他的内存上涨情况,如果你的进程跑的这段时间,内存一直在涨,注意下会不会有内存泄露问题。

    4、VMSTAT命令

    vmstat(Virtual Meomory Statistics,虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

    一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

    [root@luck ~]# vmstat 2 5
    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 102688 67348 552312 0 0 9 59 112 226 1 0 98 0 0	
    0 0 0 100632 67348 552308 0 0 0 0 123 261 1 0 99 0 0	
    0 0 0 100632 67348 552308 0 0 0 0 113 236 0 0 100 0 0	
    1 0 0 100632 67348 552308 0 0 0 0 107 227 0 0 100 0 0	
    0 0 0 101244 67364 552312 0 0 0 54 132 282 1 0 99 0 0
    

    2表示每个两秒采集一次服务器状态,5表示只采集5次。

    实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

    [root@luck ~]# 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
    1 0 0 97896 67404 552320 0 0 9 59 112 226 1 0 98 0 0	
    0 0 0 97896 67404 552320 0 0 0 0 116 236 0 0 100 0 0	
    0 0 0 97896 67404 552320 0 0 0 0 110 227 0 0 100 0 0	
    0 0 0 97896 67404 552320 0 0 0 0 112 233 0 0 100 0 0	
    0 0 0 97896 67412 552316 0 0 0 6 109 231 0 0 99 0 0

    这表示vmstat每2秒采集数据,一直采集,直到我结束程序

    好了,命令介绍完毕,现在开始实战讲解每个参数的意思。

    1)procs

    • r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
    • b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。

    2)memory

    • swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
    • free列表示当前空闲的物理内存数量(以KB为单位);
    • buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
    • cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。

    3)swap

    • si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
    • so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
    • 一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。

    4)IO

    • bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
    • bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒) 
      这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。

    5)system

    • in列表示在某一时间间隔中观察到的每秒设备中断数;
    • cs列表示每秒产生的上下文切换次数。 
      上面这两个值越大,会看到内核消耗的CPU时间就越多。

    6)CPU

      • us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
      • sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
      • id列显示了CPU处在空闲状态的时间百分比;
      • wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
      • st列一般不关注,虚拟机占用的时间百分比。
    [root@luck ~]# vmstat -s    # 查看内存使用的详细信息
          1922128  total memory
          1823068  used memory
          1379808  active memory
           336672  inactive memory
            99060  free memory
            67588  buffer memory
           552336  swap cache
                0  total swap
                0  used swap
                0  free swap
           130458 non-nice user cpu ticks
              534 nice user cpu ticks
            24241 system cpu ticks
          9501001 idle cpu ticks
             8571 IO-wait cpu ticks
                0 IRQ cpu ticks
               40 softirq cpu ticks
                0 stolen cpu ticks
           828737 pages paged in
          5665116 pages paged out
                0 pages swapped in
                0 pages swapped out
         10837769 interrupts
         21844373 CPU context switches
       1498970380 boot time
           145814 forks
    

     上面的信息主要来自于/proc/meminfo/proc/stat/proc/vmstat

    5、FREE命令

    监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的就是free命令

    [root@luck ~]# free
                 total       used       free     shared    buffers     cached
    Mem:       1922128    1823068      99060        184      67476     552324
    -/+ buffers/cache:    1203268     718860
    Swap:            0          0          0
    

    第一行(Mem):

    • total:内存总数 32872632 KB
    • used:已使用的内存数 12393128 KB
    • free:空闲的内存数 20479504 KB
    • shared:多个进程共享的内存,总是0
    • buffers:缓存内存数 23308 KB
    • cached:缓存内存数 7496048 KB

    第二行(-/+ buffers/cache):

    • used:第一行Mem中的 used - buffers - cached = 12393128 - 23308 - 7496048 = 4873772 KB
    • free:第一行Mem中的 free + buffers + cached = 20479504 + 23308 + 7496048 = 27998860 KB
    • 可见这一行【used-buffers/cache】反映的是被程序实实在在吃掉的内存,【used+buffers/cache】反映的是可以挪用的内存总数。

    第三行(Swap):表示交换分区的内存使用状态。

    第一行内存状态是对于操作系统来说的,buffers/cached 都是属于被使用。

    第二行内存状态是对于应用程序来说的,对于应用程序来说,buffers/cached占有的内存是可用的,因为buffers/cached是为了提高程序执行的性能,当应用程序需要用到内存的时候buffers/cached会很快地被回收,以供应用程序使用。

    通常我们是从应用的角度来看的,所以只看第二行就行了。

    另外,我们可以使用参数-m-g来以MBGB单位显示:

    [root@luck ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1877       1780         96          0         65        539
    -/+ buffers/cache:       1175        702
    Swap:            0          0          0
    

    6、MPSTAT命令

    mpstat(Multiprocessor Statistics,多处理器统计)是实时系统监控工具,它会报告与CPU相关的统计信息,这些信息存放在/proc/stat文件中。

    [root@luck ~]# mpstat -P ALL 2
    Linux 2.6.32-696.1.1.el6.x86_64 (luck) 	07/03/2017 	_x86_64_	(1 CPU)
    
    03:34:27 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    03:34:29 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:34:29 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    
    03:34:29 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    03:34:31 PM  all    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
    03:34:31 PM    0    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
    
    03:34:31 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    03:34:33 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:34:33 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    

    至于各百分比的含义前面已经介绍过了,这里就不再赘述。

    其他常用监控命令

    网络监控

    1、ethtool   eth0

    使用ethtool查看网卡带宽,需要root权限:

    2、SAR

    [root@luck ~]# sar -n DEV 3 100
    Linux 2.6.32-696.1.1.el6.x86_64 (luck) 	07/03/2017 	_x86_64_	(1 CPU)
    
    03:40:17 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
    03:40:20 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    03:40:20 PM      eth0      0.33      0.00      0.02      0.00      0.00      0.00      0.00
    
    03:40:20 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
    03:40:23 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    03:40:23 PM      eth0      1.34      1.00      0.09      0.21      0.00      0.00      0.00
    
    • IFACE:网络设备的名称
    • rxpck/s:每秒钟接收到的包数目
    • txpck/s:每秒钟发送出去的包数目
    • rxkB/s:每秒钟接收到的字节数
    • txkB/s:每秒钟发送出去的字节数

    3、netstat

    netstat命令一般用于检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据。

    部分选项如下:

    -a, --all, --listening 显示所有连接中的Socket。
    
    -n, --numeric 以数字形式显示地址和端口号。
    
    -t, -–tcp 显示TCP传输协议的连线状况。
    
    -u, -–udp 显示UDP传输协议的连线状况。
    
    -p, --programs 显示正在使用socket的程序名/进程ID
    
    -l, --listening 显示监控中的服务器的Socket。
    
    -o, --timers 显示计时器。
    
    -s, --statistics 显示每个网络协议的统计信息(比如SNMP)
    
    -i, --interfaces 显示网络界面信息表单(网卡列表)
    
    -r, --route 显示路由表
    

    常用的几种:

    $ netstat -aup # 输出所有UDP连接状况
    
    $ netstat -atp # 输出所有TCP连接状况
    
    $ netstat -s # 显示各个协议的网络统计信息
    
    $ netstat -i # 显示网卡列表
    
    $ netstat -r # 显示路由表信息
    

    找出程序运行的端口: netstat -ap | grep ssh

    找出运行在指定端口的进程: netstat -anp | grep 60010

    4、DF

    df命令的功能是用来检查linux的文件系统的磁盘空间占用情况。如果没有文件名被指定,则显示当前所有被挂载的文件系统,默认以 KB 为单位。

    常用选项如下:

    -a 全部文件系统列表
    
    -h 以方便阅读的方式显示
    
    -i 显示inode信息
    
    -T 显示文件系统类型
    
    -l 只显示本地文件系统
    
    -k 以KB为单位 -
    
    m 以MB为单位
    

      最常用的就是$ df -h

    5、PS

    ps(Process Status,进程状态)命令是最基本同时也是非常强大的进程查看命令,最常用的命令就是ps aux——显示当前所有进程

    $ ps aux | grep root # 输出root用户的所有进程
    
    $ ps -p <pid> -L # 显示进程<pid>的所有线程
    
    $ ps -e -o pid,uname,pcpu,pmem,comm # 定制显示的列
    
    $ ps -o lstart <pid> # 显示进程的启动时间

    ps命令的输出可以按任意某一列进行排序,通过使用内部排序键(列的别名),例如:

    $ ps aux --sort=+rss # 按内存升序排列
    
    $ ps aux --sort=-rss # 按内存降序排列
    
    $ ps aux --sort=+%cpu # 按cpu升序排列
    
    $ ps aux --sort=-%cpu # 按cpu降序排列

    ps命令的用法太多了,掌握一些常用的用法就好。如需了解更多的可选项,可以查看man手册。

  • 相关阅读:
    IM开发快速入门(一):什么是IM系统?
    IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
    Android保活从入门到放弃:乖乖引导用户加白名单吧(附7大机型加白示例)
    IM开发干货分享:我是如何解决大量离线消息导致客户端卡顿的
    LetsTalk_Android中引导用户加入白名单图-2
    LetsTalk_Android中引导用户加入白名单图
    基于Go的马蜂窝旅游网分布式IM系统技术实践
    2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
    微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结
    史上最通俗,彻底搞懂字符乱码问题的本质
  • 原文地址:https://www.cnblogs.com/chuyiwang/p/7111522.html
Copyright © 2011-2022 走看看