linux中查看系统活动情况报告sar命令详解

参考:https://www.phpmianshi.com/?id=107

有很多工具可以看网络流量,但我最喜欢sar。

sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、 系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

 

sar命令常用格式

 

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

其中:

t为采样间隔,n为采样次数,默认值是1;

-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。

options 为命令行选项,sar命令常用选项如下:

-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息

 

sar 既能报告当前数据,也能报告历史数据

不带选项执行会以10分钟为间隔报告自午夜起当天的CPU利用率。这个粒度太粗,需要修改为1分钟。修改方法:

vi /etc/cron.d/sysstat
#将这一行:
*/10 * * * * root /usr/lib64/sa/sa1 1 1
#更换为:
*/1 * * * * root /usr/lib64/sa/sa1 1 1

 

比如查看本月23号以来服务器的平均负载状况

sar -q -f /var/log/sa/sa23

 

统计网络信息 sar -n
 

    -n { <关键词> [,...] | ALL }
        关键词可以是:
        DEV    网卡
        EDEV    网卡 (错误)
        NFS    NFS 客户端
        NFSD    NFS 服务器
        SOCK    Sockets (套接字)    (v4)
        IP    IP 流    (v4)
        EIP    IP 流    (v4) (错误)
        ICMP    ICMP 流    (v4)
        EICMP    ICMP 流    (v4) (错误)
        TCP    TCP 流    (v4)
        ETCP    TCP 流    (v4) (错误)
        UDP    UDP 流    (v4)
        SOCK6    Sockets (套接字)    (v6)
        IP6    IP 流    (v6)
        EIP6    IP 流    (v6) (错误)
        ICMP6    ICMP 流    (v6)
        EICMP6    ICMP 流    (v6) (错误)
        UDP6    UDP 流    (v6)

 

 

1. sar -n DEV 1   即可每秒刷新一次网络流量。

[root@dev logs]#     sar -n DEV 1
Linux 2.6.32-504.30.3.el6.x86_64 (dev.aigupiao.com)     05/31/20        _x86_64(2 CPU)

20:09:14        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
20:09:15        lo      0.00    0.00      0.00      0.00      0.00      0.00      0.00
20:09:15        eth0    2718.18   2111.11   1424.46    497.72      0.00      0.00      0.00

20:09:15         IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
IFACE  本地网卡接口的名称
rxpck/s  每秒钟接受的数据包
txpck/s  每秒钟发送的数据库
rxKB/S  每秒钟接受的数据包大小,单位为KB
txKB/S  每秒钟发送的数据包大小,单位为KB
rxcmp/s  每秒钟接受的压缩数据包
txcmp/s  每秒钟发送的压缩包
rxmcst/s  每秒钟接收的多播数据包

 

当然,你也可以使用ifstat、nload、iptraf等命令查看。然而数据来源,还是来自我们的/proc目录
watch cat /proc/net/dev查看占流量最大的IP
有时候我们发现网络带宽占用非常高,但我们无法判断到底流量来自哪里。这时候,iftop就可以帮上忙了。

 

2. sar -n EDEV 1 1 网络设备通信失败信息

[root@super-task-cron logs]# sar -n EDEV 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

07:59:22 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
07:59:23 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:59:23 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
IFACE 网卡名称
rxerr/s  每秒钟接收到的损坏的数据包
txerr/s  每秒钟发送的数据包错误数
coll/s  当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有
rxdrop/s  当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目
txdrop/s 当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目
txcarr/s  当发送数据包的时候,每秒钟载波错误发生的次数
rxfram/s   在接收数据包的时候,每秒钟发生的帧对其错误的次数
rxfifo/s    在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数
txfifo/s    在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数

 

3. sar -n SOCK 1 1 统计socket连接信息 

[root@super-task-cron logs]# sar -n SOCK 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:03:33 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
08:03:34 PM       206        64         2         0         0         8
Average:          206        64         2         0         0         8
totsck  当前被使用的socket总数
tcpsck  当前正在被使用的TCP的socket总数
udpsck  当前正在被使用的UDP的socket总数
rawsck  当前正在被使用于RAW的skcket总数
if-frag  当前的IP分片的数目
tcp-tw  TCP套接字中处于TIME-WAIT状态的连接数量

 

4. sar -n TCP 1 1 TCP连接的统计 

[root@super-task-cron logs]# sar -n TCP 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:06:27 PM  active/s passive/s    iseg/s    oseg/s
08:06:28 PM      1.00      0.00   1114.00   1140.00
Average:         1.00      0.00   1114.00   1140.00
active/s  新的主动连接
passive/s  新的被动连接
iseg/s  接受的段
oseg/s  输出的段

 

5. sar -u  或 sar(默认) 查看CPU和IOWAIT统计状态

  

[root@super-task-cron logs]# sar -u 1 3  
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:16:05 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
08:16:06 PM     all      7.07      0.00      3.03      0.00      0.00     89.90
08:16:07 PM     all      7.54      0.00      2.01      0.00      0.00     90.45
08:16:08 PM     all      7.11      0.00      2.03      0.00      0.00     90.86
Average:        all      7.24      0.00      2.36      0.00      0.00     90.40

 

%user   用户空间的CPU使用
%nice   改变过优先级的进程的CPU使用率
%system   内核空间的CPU使用率
%iowait   CPU等待IO的百分比 
%steal   虚拟机的虚拟机CPU使用的CPU
%idle   空闲的CPU

主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。 

 

6.sar -q 1 1 查看平均负载

[root@super-task-cron logs]# sar -q 1 3
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:20:36 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
08:20:37 PM         0       156      0.12      0.17      0.21         0
08:20:38 PM         0       157      0.11      0.16      0.21         0
08:20:39 PM         0       157      0.11      0.16      0.21         0
Average:            0       157      0.11      0.16      0.21         0
runq-sz    运行队列的长度(等待运行的进程数,每核的CP不能超过3个)
plist-sz   进程列表中的进程(processes)和线程数(threads)的数量
ldavg-1  最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推
ldavg-5   最后5分钟的CPU平均负载
ldavg-15  最后15分钟的CPU平均负载

 

7.sar -r 1 1或者 sar -S 查看内存使用情况

[root@super-task-cron logs]# sar -r 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:22:27 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
08:22:28 PM    333488   3546736     91.41    478972    941360   2581244     66.52   1027676    775288       856
Average:       333488   3546736     91.41    478972    941360   2581244     66.52   1027676    775288       856
kbmemfree   空闲的物理内存大小
kbmemused   使用中的物理内存大小
%memused  物理内存使用率
kbbuffers  内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache. 
kbcached  缓存的文件大小
kbcommit   保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
commit   这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值

 

内存使用情况提示:服务器内存占用量较高的情况其实非常正常。这是因为内存的读写速度及效率远高于服务器磁盘,因此操作系统倾向于将内存作为缓冲机制预先载入数据,从而提高数据读取速度。

同样,内存使用百分比也并不是什么大问题(除非大家没有设置虚拟内存分区,但这也与内存本身无关)。大家真正需要关注的是虚拟内存使用百分比,因为 只有在服务器的物理内存被全部占用后、虚拟内存才会接替而上发挥作用。这一数字越低,就说明服务器的运行状态越好。如果虚拟内存使用率为0%,则意味着我 们的服务器能够完全利用物理内存执行任务。

那么虚拟内存使用率达到多少才算过高?这取决于大家自己的感觉。一般来说,如果虚拟内存使用率一直不高、那么我们的服务器的运行状态还是比较理想 的。如果大家发现虚拟内存使用率随时间不断提升(例如由1%到7%再到32%),这就代表服务器上的某些进程正在疯狂吞噬内存,我们需要及时展开调查以了 解具体情况(而不该直接安装更多内存)。一旦服务器用尽了所有物理内存与虚拟内存,那么整套系统的运行将变得极为缓慢,需要经过重启才能暂时恢复正常。

 

8.sar -W 1 3 查看系统SWAP分区统计

[root@super-task-cron logs]# sar -W 1 3 
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:24:09 PM  pswpin/s pswpout/s
08:24:10 PM      0.00      0.00
08:24:11 PM      0.00      0.00
08:24:12 PM      0.00      0.00
Average:         0.00      0.00
pswpin/s    每秒从交换分区到系统的交换页面(swap page)数量
pswpott/s   每秒从系统交换到swap的交换页面(swap page)的数量

9.sar -b 1 1 查看IO传递速率

[root@super-task-cron logs]# sar -b 1 1 
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:25:31 PM       tps      rtps      wtps   bread/s   bwrtn/s
08:25:32 PM      0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00
tps  磁盘每秒钟的IO总数,等于iostat中的tps
rtps  每秒钟从磁盘读取的IO总数
wtps  每秒钟从写入到磁盘的IO总数
bread/s  每秒钟从磁盘读取的块总数
bwrtn/s  每秒钟此写入到磁盘的块总数

 

10.sar -d 1 1 查看磁盘使用情况

[root@super-task-cron logs]# sar -d  1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:26:30 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
08:26:31 PM  dev253-0      0.99      0.00     23.76     24.00      0.00      1.00      1.00      0.10
08:26:31 PM dev253-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
08:26:31 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:     dev253-0      0.99      0.00     23.76     24.00      0.00      1.00      1.00      0.10
Average:    dev253-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:      dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
DEV  磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps  每秒I/O的传输总数
rd_sec/s  每秒读取的扇区的总数
wr_sec/s  每秒写入的扇区的总数
avgrq-sz  平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz  磁盘请求队列的平均长度
await  从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
svctm  I/O的服务处理时间,即不包括请求队列中的时间
%util  I/O请求占用的CPU百分比,值越高,说明I/O越慢

 

1. avgqu-sz 的值较低时,设备的利用率较高。

2. 当%util的值接近 1% 时,表示设备带宽已经占满。

 

常用总结:

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

 

要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来

怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

数据从何而来

/proc目录是一个虚拟目录,存储的是当前内核的一系列特殊文件
比如top的load (使用uptime命令得到同样的结果)。读取的就是
/proc/loadavg 文件
而每核cpu的信息,读取
/proc/stat文件
这些命令,是对/proc目录中一系列信息的解析和友好的展示

 

  1. 每个进程都有一个pid,比如18,在 /proc/18中有很多有用的信息

  2. /proc/18/env  跟这个进程相关的环境变量

  3. /proc/18/fd    所有的file description

  4. /proc/18/cmdline  进程启动时的命令行参数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值