网络监控
方法1:通过cat /proc/net/dev采集两次,求两次结果的差值
这里获得结果是以bytes为单位的,两次的差值即为流量信息。

Linux的流量指的是网卡流量,包括输入流量和输出流量。
Receive----输入字节数
Transmit—输出字节数
1G=1024M=1024*1024K=1024*1024*1024bytes

流量的一般单位是Gbps Mbps等
1Gbps=1Gb/s
1GBps=8Gb/s

带宽利用率=流率/带宽,这里流率包括输入流率和输出流率之和。

如何查看系统的带宽呢,通过使用ethtool命令,注意该命令用root用户执行

方法2,通过sar命令sar -n DEV 1:
注意观察rxKB/s txKB/s 两列,分别描述输入流量和输出流量,这里单位是KB

方法3,通过nload命令  nload -m
Curr描述当前各网卡的流率信息
nload 默认分为上下两块:
1.上半部分是:Incoming也就是进入网卡的流量,
2.下半部分是:Outgoing,也就是从这块网卡出去的流量,
每部分都有当前流量(Curr),
平均流量(Avg),
最小流量(Min),
最大流量(Max),
总和流量(Ttl)这几个部分,看起来还是蛮直观的
nload默认的是eth0网卡,如果你想监测eth1网卡的流量使用nload eth1
nload -m 可以同时查看多个网卡的流量情况。
方法4,通过nmon命令  按n进行监控

 

Iftop:是一款实时流量监控工具,监控TCP/IP连接等。必须以root身份才能运行
第一行:带宽显示
中间部分:外部连接列表,即记录了哪些ip正在和本机的网络连接
中间部分右边:实时参数分别是该访问ip连接到本机2秒,10秒和40秒的平均流量
=>代表发送数据,<= 代表接收数据
TX:发送流量
RX:接收流量
TOTAL:总流量
Cum:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
iftop的流量显示单位是Mb,这个b是bit,是位,不是字节,而ifstat的KB,这个B就是字节了,byte是bit的8倍
进入iftop画面后的一些操作命令(注意大小写)
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p(小写)切换是否显示端口信息;
按P切换暂停/继续显示
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。

-i设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n使host信息默认直接都显示IP,如:# iftop -n
-N使端口信息默认直接都显示端口号,如: # iftop -N
-F显示特定网段的进出流量,如# iftop -F 172.30.1.0/24或# iftop -F 172.30.1.0/255.255.255.0
sar -n DEV 1 2
-n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL ,其代表的含义如下:
1.DEV显示网络接口信息。
2.EDEV显示关于网络错误的统计数据。
3.NFS统计活动的NFS客户端的信息。
4.NFSD统计NFS服务器的信息
5.SOCK显示套接字信息
6.ALL显示所有5个开关
1.IFACE:LAN接口
2.rxpck/s:每秒钟接收的数据包
3.txpck/s:每秒钟发送的数据包
4.rxbyt/s:每秒钟接收的字节数
5.txbyt/s:每秒钟发送的字节数
6.rxcmp/s:每秒钟接收的压缩数据包
7.txcmp/s:每秒钟发送的压缩数据包
8.rxmcst/s:每秒钟接收的多播数据包
9.rxerr/s:每秒钟接收的坏数据包
10.txerr/s:每秒钟发送的坏数据包
11.coll/s:每秒冲突数
12.rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
13.txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
14.txcarr/s:发送数据包时,每秒载波错误数
15.rxfram/s:每秒接收数据包的帧对齐错误数
16.rxfifo/s:接收的数据包每秒FIFO过速的错误数

网关
网关就是你的数据包要从内网发送到公网所必须经过的,一般情况下是本网段的第一个或者最后一个地址。
如下图所示,我们可以使用 route -n 来查看相关的信息。

Destination 目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关。
Gateway 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关。如果没有就显示星号(*)。
Genmask Destination 字段的网络掩码,Destination 是主机时需要设为 255.255.255.255,是默认路由时会设置为 0.0.0.0
Flags 标记
● U 该路由可以使用。
 
● H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网络号与子网号的组合。
 
● G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地 是直接相连的。
 
● R 恢复动态路由产生的表项。
 
● D 该路由是由改变路由(redirect)报文创建的。
 
● M 该路由已被改变路由报文修改。
 
● ! 这个路由将不会被接受。
Metric 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的。
Ref 路由项引用次数 。
Use 此路由项被路由软件查找的次数。
Iface 网卡名字,例如 eth0。
网关实质上是一个网络通向其他网络的IP地址
在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机
如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程也是如此
只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。
什么是默认网关
就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关
所谓“路由”,是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器,它的英文名称为Router,是一种连接多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互 “读懂”对方的数据,从而构成一个更大的网络
路由器主要有以下几种功能: 
第一,网络互连,路由器支持各种局域网和广域网接口,主要用于互连局域网和广域网,实现不同网络互相通信; 
第二,数据处理,提供包括分组过滤、分组转发、优先级、复用、加密、压缩和防火墙等功能; 
第三,网络管理,路由器提供包括配置管理、性能管理、容错管理和流量控制等功能

 

 

CPU方面:
r:展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
us:用户CPU时间。
sy:系统CPU时间。
id:空闲CPU时间。
wa:等等I/O CPU时间。
us+sy+id+wa=100%
分析思路:
如果 r 经常大于4,且id经常小于40,表面CPU的负荷很重。

 

磁盘IO监控
读写IO(Read/Write IO)操作
  磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是是读IO操作
顺序IO模式(Queue Mode)/并发IO模式(Burst Mode)
  磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序IO;当磁盘组能同时执行多个IO命令时,称为并发IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。

iostat
iostat -d -k 1 10

1)参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次
2)含义:
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)
Iostat -d -k -x 1

1)使用-x参数我们可以获得更多统计信息
2)rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
3)wrqm/s:每秒这个设备相关的写入请求有多少被Merge了;rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。
4)rKB/s:The number of read requests that were issued to the device per second;
5)wKB/s:The number of write requests that were issued to the device per second;avgrq-sz 平均请求扇区的大小avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。   
6)await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
7)svctm    表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。
8)一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
9)输出结果中,bi bo 可以表示磁盘当前性能:
10)•bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024 byte 。
11)•bo 块设备每秒发送的块数量,例如我们读取文件,bo 就要大于0。bi 和 bo 一般都要接近 0,不然就是 IO 过于频繁,需要调整。
iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2           #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10       #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10           #查看CPU状态

iotop
iotop 监控 Linux 内核输出的 I/O 使用信息,并且显示一个系统中进程或线程的当前 I/O 使用情况。
它显示每个进程/线程读写 I/O 带宽。它同样显示当等待换入和等待 I/O 的线程/进程花费的时间的百分比。
Total DISK READ 和 Total DISK WRITE 的值一方面表示了进程和内核线程之间的总的读写带宽,另一方面也表示内核块设备子系统的。
Actual DISK READ 和 Actual DISK WRITE 的值表示在内核块设备子系统和下面硬件(HDD、SSD 等等)对应的实际磁盘 I/O 带宽
IO:它显示每个进程的 I/O 利用率,包含磁盘和交换。
SWAPIN: 它只显示每个进程的交换使用率。

vmstat 2 5
如果发现等待的进程r和处在非中断睡眠状态的进程数b非常多,并且发送到块设备的块数si和从块设备接收到的块数so非常大,那就说明磁盘io比较多

iostat -dx 显示磁盘扩展信息
  root@fileapp:~# iostat -dx
  r/s 和 w/s 分别是每秒的读操作和写操作,而rKB/s 和wKB/s 列以每秒千字节为单位显示了读和写的数据量
  如果这两对数据值都很高的话说明磁盘io操作是很频繁。
sar -d -p 1 2
对于磁盘 IO 性能,一般有如下评判标准:
正常情况下 svctm 应该是小于 await 值的,而 svctm 的大小和磁盘性能有关,CPU 、内存的负荷也会对 svctm 值造成影响,过多的请求也会间接的导致 svctm 值的增加。
await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
%util 项的值也是衡量磁盘 I/O 的一个重要指标,如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
默认情况下,sar从最近的0点0分开始显示数据;如果想继续查看一天前的报告;可以查看保存在/var/log/sa/下的sar日志:
sar -d -p -f  /var/log/sa/sa11  | more

 

vmstat、sar、iostat检测是否是CPU瓶颈
free、vmstat检测是否是内存瓶颈
iostat检测是否是磁盘I/O瓶颈
netstat检测是否是网络带宽瓶颈
swap
si--由磁盘调入内存,也就是内存进入内存交换区的数量。
so--由内存调入磁盘,也就是内存交换区进入内存的数量。
si、so的值长期不为0,表示系统内存不足。需增加系统内存