当前位置:首页 > 运维 > 正文内容

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

phpmianshi5年前 (2016-04-13)运维154

有很多工具可以看网络流量,但我最喜欢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平均负载
blocked     当前阻塞的进程数量,在等待IO完成


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  进程启动时的命令行参数

版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

linux中lsof命令详解

简介lsof(list open files)是一个列出当前系统打开文件的工具,在Unix中一切(包括网络套接口)都是文件。有趣的是,lsof也是有着最多开关的Linux/Unix命令之一。它有那...






TCP(Transmission Control Protocol) 传输控制协议

三次握手

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:

SYN(synchronous建立联机) 同步报文段

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束) 结束报文段

RST(reset重置) 复位报文段

URG(urgent紧急) 紧急指针

Sequence number(顺序号码)

Acknowledge number(确认号码)

客户端TCP状态迁移:

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

服务器TCP状态迁移:

CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED


各个状态的意义如下: 

LISTEN - 侦听来自远方TCP端口的连接请求; 

SYN-SENT -在发送连接请求后等待匹配的连接请求; 

SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; 

ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; 

FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

FIN-WAIT-2 - 从远程TCP等待连接中断请求; 

CLOSE-WAIT - 等待从本地用户发来的连接中断请求; 

CLOSING -等待远程TCP对连接中断的确认; 

LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; 

TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认; 

CLOSED - 没有任何连接状态;


TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

确认号:其数值等于发送方的发送序号 +1(即接收方期望接收的下一个序列号)。

图1 TCP三次握手建立连接  


TCP协议中的三次握手和四次挥手

理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗口?连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信息中包含了自己剩余的缓冲区...

CSRF攻击与防御

 CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:    &nbs...

linux中Cannot assign requested address的问题处理

问题描述:最近系统报警有类型如下错误:Cannot assign requested address  主要是连接mysql时产生的错误。分析原因:客户端与服务端每建立一个连接,客户端一侧都...

Nginx面试中最常见的18道题

1、请解释一下什么是Nginx?Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以其高性能...

Certbot-免费的https证书

什么是HTTPS?HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。