linux统计类/配置类工具(网络)

 

 

ethtool命令
ethtool是用于查询及设置网卡参数的命令。
    -a      查看网卡中接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
    -A      修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
    -c      display the Coalesce(聚合、联合) information of the specified ethernet card.聚合网口信息,使看起来更有规律。
    -C      Change the Coalesce setting of the specified ethernet card.修改网卡聚合信息。
    -g      Display the rx/tx ring parameter information of the specified ethernet card. 显示网卡的接收/发送环形参数。
    -G      Change the rx/tx ring setting of the specified ethernet card. 修改网卡的接收/发送环形参数。
    -i      显示网卡驱动的信息,如驱动的名称、版本等。
    -d      显示register dump信息, 部分网卡驱动不支持该选项。
    -e      显示EEPROM dump信息,部分网卡驱动不支持该选项。
    -E      修改网卡EEPROM byte.
    -k      显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。
    -K      修改网卡Offload参数的状态
    -p      用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
    -r      如果auto-negotiation模块的状态为on,则restarts auto-negotiation.
    -s      修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。加上-s选项修改的内容才会生效
    -S      显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
    -t      让网卡执行自我检测,有两种模式:offline or online.

-------------------------------------------------------------------
ethtool ethx            #查询ethx网口基本设置
ethtool -m ethx         #查询收发光:查询/解码模块EEPROM信息和光学诊断(如果可用)
ethtool -i ethx         #查询网口的驱动相关信息,如驱动名称、版本信息等。
ethtool -d ethx         #查询网口注册性信息。
ethtool -S ethx         #查询网口收发包统计。
ethtool -s ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off]     #设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商。自动协商关闭后,重新打开即可恢复原来的选项。
ethtool -s ethX advertise N         #指定通过自动协商机制通告的速度和双工方式。N为十六进制值,如0x008表示100Mb/s+全双工、0x020表示1000Mb/s+全双工。
ethtool -A tx off eth0              #停止网卡的发送模块TX;操作完毕后,可输入:ethtool -a eth0,查看tx模块是否已被停止。
ethtool -K eth0 rx off              #操作完毕后,可输入:ethtool -k eth0,查看校验功能是否已被停止。
ethtool -p eth0 10                  #使网卡的led灯闪烁10秒。(时间可以不指定)
ethtool -s eth0 speed 100           #将千兆网卡的速度降为百兆

-------------------------------------------------------------------
永久保存配置
将 ethtool 设置永久保存在网络设备有两种方法,一种是写入网口配置文件中,一种是开机自启动脚本。
例如:ethtool -s eth0 speed 100 duplex full autoneg off
(1) ethtool 设置可通过 /etc/sysconfig/network-scripts/ifcfg-ethx 文件保存,从而在设备下次启动时激活选项。
    添加如下一行:
        ETHTOOL_OPTS="speed 100 duplex full autoneg off"
(2) 将ethtool设置写入/etc/rc.d/rc.local之中,开机自动执行命令设置。
    ethtool -s eth0 speed 100 duplex full autoneg off

-------------------------------------------------------------------
[root@localhost ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
 
// 支持模式
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes // 支持自动协商
Supported FEC modes: Not reported
 
// 通告模式
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes // 使用自动协商
Advertised FEC modes: Not reported
 
Speed: 1000Mb/s // 当前速率 1000Mb/s
Duplex: Full // 工作模式为全双工
 
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
 
Auto-negotiation: on // 自动协商打开
 
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes


https://blog.csdn.net/u011857683/article/details/83758689
ethtool命令

 

 

ip命令;route命令
===============================================================================================
ip 命令是 Linux 加强版的的网络配置工具,用于代替 ifconfig、route等命令。
OBJECT={ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | maddr | mroute | mrule | monitor | xfrm | token }
常用对象的取值含义如下:
    link:网络设备
    address:设备上的协议(IP或IPv6)地址
    addrlabel:协议地址选择的标签配置
    route:路由表条目
    rule:路由策略数据库中的规则
常用选项的取值含义如下:
    -V:显示命令的版本信息;
    -s:输出更详细的信息;
    -f:强制使用指定的协议族;
    -4:指定使用的网络层协议是IPv4协议;
    -6:指定使用的网络层协议是IPv6协议;
    -0:输出信息每条记录输出一行,即使内容较多也不换行显示;
    -r:显示主机时,不使用IP地址,而使用主机的域名。

ip的命令支持缩写!例如 ip address == ip add == ip a
个人总结ip命令分为三级:一级ip;二级即对象,例如link、address等;三级为动作,例如默认为show,可以指定为set、add、del等
    作用域:global(全局可用)、link(仅链路可用)、host(本机可用)

1.查看网卡信息(替换ifconfig)
    ip link list ==  ip link show == ip link       # 查看二层信息,显示网络设备的运行状态
    ip -s link list                                # 查看二层信息,显示更加详细的设备信息
    ip link | grep -E '^[0-9]' | awk -F: '{print $2}'   # 获取主机所有网络接口
    ip addr show == ip a                           # 查看三层信息,显示网卡IP信息
2.禁用启用网卡、设置参数等(替换ifconfig)
    ip link set eth0 up              # 开启网卡
    ip link set eth0 down            # 关闭网卡
    ip link set eth0 promisc on      # 开启网卡的混合模式
    ip link set eth0 promisc offi    # 关闭网卡的混个模式
    ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
    ip link set eth0 mtu 1400        # 设置网卡最大传输单元
3.配置临时测试IP(替换ifconfig)
    ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1,该命令可以直接配置单网卡多IP;配置多IP后,ifconfig命令不能显示
        配置默认为global类型路由
    ip add add 3.3.3.3/24 dev eth0 label eth0:1 #打上标签eth0:1的路由,ifconfig可以正确显示!
    ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址

4.查看及操作路由
    ip neigh list                            # 显示邻居表
    ip route list                            # 查看路由信息
    ip route show == ip route                # 显示系统路由
    ip route flush dev eth0                  # 清除系统路由
    ip route add default via 192.168.1.254   # 设置系统默认路由
    ip route add default via 192.168.0.254  dev eth0        # 设置默认网关为192.168.0.254
    ip route del default                     # 删除默认路由
    ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置指定路由网关为192.168.0.254,出接口eth0
    ip route del 192.168.4.0/24              # 删除192.168.4.0网段的网关
    ip route delete 192.168.1.0/24 dev eth0  # 删除路由

----------------------------------------------------------------------------------------------
route命令能够用于IP路由表的显示和操作。它的主要作用是创建一个静态路由让指定一个主机或者一个网络通过一个网络接口,如eth0。(route是过时命令,建议用ip route替代)
    -c 显示更多信息
    -n 不解析名字
    -v 显示详细的处理信息
    -F 显示发送信息
    -C 显示路由缓存
    -f 清除所有网关入口的路由表。
    -p 与add 命令一起使用时使路由具有永久性。
    
    add:添加一条新路由。
    del:删除一条路由。
    -net:目标地址是一个网络。
    -host:目标地址是一个主机。
    netmask:当添加一个网络路由时,需要使用网络掩码。
    gw:路由数据包通过网关。注意,你指定的网关必须能够达到。
    metric:设置路由跳数。

route        #显示路由信息
route add -net 10.0.0.0 netmask 255.255.255.0 dev eth0   #新增静态路由,不指定下一跳,只指定出接口
route add -net 10.0.0.0/24 gw 10.0.0.1 dev eth0          #新增静态路由,既指定下一跳,也指定出接口
route add -host 192.168.40.1 gw 10.0.0.1                 #新增主机路由,指定下一跳,不指定出接口
route add -host 192.168.40.1 dev eth0                    #新增主机路由
route del -host 192.168.40.1                             #删除主机路由
route add -net 10.10.10.128 netmask 255.255.255.128 reject  #屏蔽路由
route del -net 10.10.10.128 netmask 255.255.255.128         #删除路由
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.40.2      #设置默认网关
route add default gw  192.168.40.2      #设置默认网关
route del default gw  192.168.40.2      #删除默认网关
ip命令;route命令
ip rule
=================================================================================================
https://www.kancloud.cn/chunyu/php_basic_knowledge/2137338

在某些情况下,我们不仅要根据目的地地址,还要根据其他数据包字段(源地址、IP协议、传输协议端口甚至数据包有效负载)来不同地路由数据包。此任务称为'策略路由'。为了解决这一问题,传统的基于目的地的路由表(根据最长匹配规则排序)被替换为“路由策略数据库”(简称RPDB),RPDB通过执行一组规则来选择路由。

每个策略路由规则都由一个选择器和一个动作谓词组成。RPDB按优先级降低的顺序进行扫描。每个规则的选择器应用于{源地址,目标地址,传入接口,tos,fwmark}并且,如果选择器与数据包匹配,则执行该操作。动作谓词可以成功返回。在这种情况下,它将给出路由或故障指示,并且RPDB查找被终止。否则RPDB程序继续执行下一个规则。

在启动时,内核配置默认的RPDB,包括三个规则:
    1.优先级:0,选择器:匹配任何内容,操作:查找路由表本地(ID 255)。本地表是一种特殊的路由表,包含本地和广播地址的高优先级控制路由
    2.优先级:32766,选择器:匹配任何内容,操作:查找路由表main(ID 254)。主表是包含所有非策略路由的常规路由表。此规则可以被删除和/或由其他规则覆盖管理员
    3.优先级:32767,选择器:匹配任何内容,操作:查找路由表默认值(ID253)。默认表为空。如果没有先前的默认规则选择数据包,则它将保留用于某些后处理。这条规则也可能将被删除
    
    注:不要混淆路由表和策略:规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。


每个RPDB条目都有附加属性。F、 每个规则都有一个指向某个路由表的指针。NAT和伪装规则有一个属性来选择要翻译/伪装的新IP地址。除此之外,规则还有一些可选的路由拥有的属性,即领域。这些值不会覆盖路由表中包含的值。它们仅在路由未选择任何属性时使用。
    RPDB可能包含以下类型的规则:
        unicast:规则规定返回在规则引用的路由表中找到的路由
        blackhole:规则规定悄悄地丢弃数据包
        unreachable:规则规定生成“网络不可达”错误
        prohibit:规则规定生成“管理禁止通信”错误
        nat:规则规定将IP数据包的源地址转换为其他值


ip rule add/del
    option:
        type TYPE (default):规则类型
        from PREFIX:选择要匹配的源前缀
        to PREFIX:选择要匹配的目的前缀
        iif NAME:选择要匹配的传入设备。如果接口是环回,则该规则仅匹配源自此主机的数据包。这意味着您可以为转发的数据包和本地数据包创建单独的路由表,从而完全隔离它们。
        oif NAME:选择要匹配的传出设备。传出接口仅适用于来自绑定到设备的本地套接字的数据包
        tos TOS/dsfield TOS:选择要匹配的TOS值
        fwmark MARK:选择要匹配的标记值
        priority PREFERENCE:此规则的优先级。每个规则都应该有一个显式设置的唯一优先级值
        table TABLEID:如果规则选择器匹配,则要查找的路由表标识符。也可以使用查找而不是表格
        realms FROM/TO:选择规则是否匹配以及路由表查找是否成功的领域。 仅当路由未选择任何领域时才使用领域TO
        nat ADDRESS:要转换的IP地址块的基础(用于源地址)。 地址可以是NAT地址块的开始(由NAT路由选择),也可以是本地主机地址(甚至为零)。 在最后一种情况下,路由器不转换数据包,而是将其伪装到该地址。使用map-to代替nat意味着同样的事情

------------------------------------------------------------------------------------------------------------------------------
// 实例:双网卡数据路由策略选择,让来自192.168.1.0/24的数据包走10.60.60.1网关,来自192.168.2.0/24的数据包走172.0.0.1网关
 1、定义表
    echo 10 clinet_cnc >>/etc/iproute2/rt_tables
    echo 20 clinet_tel >>/etc/iproute2/rt_tables   
2、新增规则
    ip rule add from 192.168.1.0/24 table clinet_cnc
    ip rule add from 192.168.2.0/24 table clinet_tel
3、添加路由
    ip route add default via 10.60.60.1  table clinet_cnc
    ip route add default via 172.0.0.1 table clinet_tel
4、刷新路由表
    ip route flush cache


ip rule flush   刷新路由规则,此命令没有参数
ip rule list    列出路由规则,此命令没有参数
ip route show table $table_number
ip route show table $table_name
ip rule

 

#cat /etc/sysconfig/network-scripts/route-bond0

default via 10.0.0.119 dev bond0
固化路由

 

linux统计类工具(网络)

ifconfig 命令;ifconfig命令显示信息解读
===================================================================================================
ifconfig 命令详解
ifconfig可设置网络设备的状态,或是显示目前的设置。(ifconfig是过时命令,建议使用ip addr 和ip link替代)
    -a                                  #显示全部接口信息。
    -s                                  #显示摘要信息(类似于 netstat -i)。
    <interface> address                 #为网卡设置IPv4地址。
    <interface> add <address>           #给指定网卡配置IPv6地址。
    <interface> del <address>           #删除指定网卡的IPv6地址。
    <interface> netmask <address>       #设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个十进制数。如果不打算将网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码。
    <interface> dstaddr <address>       #设定一个远端地址,建立点对点通信。
    <interface> tunnel <address>        #建立隧道。
    <interface> hw <address>            #设置硬件地址。
    <interface> mtu <NN>                #设置最大传输单元。
    <interface> [-]arp                  #设置指定网卡是否支持ARP协议。-表示不支持arp。
    <interface> multicast               #为网卡设置组播标志。
    <interface> [-]promisc              #设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包。-表示关闭混杂模式。
    <interface> txqueuelen <NN>         #为网卡设置传输列队的长度。
    <interface> up                      #启动指定网卡。
    <interface> down                    #关闭指定网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。


查看网卡
    ifconfig    #默认查看活动网卡的信息
    ifconfig -a #查看全部网络的信息
    ifconfig eth0

启动关闭指定网卡
    ifconfig eth0 down
    ifconfig eth0 up

配置和删除ipv4/ipv6地址
    ifconfig eth0 10.1.1.10 netmask 255.0.0.0   #临时修改网卡IP
    ifconfig eth0 10.1.1.10/8   #临时修改网卡IP
    ifconfig eth0 192.168.1.100 netmask 255.255.255.0                               #配置ip地址和子网掩码
    ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255       #配置ip地址、子网掩码和广播地址
    网卡上配置IP,路由表会自动添加相应的直连路由;环回口配置IP,路由表不添加表项!主机ping环回口IP所在网段的任意IP,都是通的!

    ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0 up                          #单网卡添加多个IP地址
    ifconfig eth0:1 192.168.2.100 netmask 255.255.255.0 up                          #单网卡添加多个IP地址

    ifconfig eth0 del 192.168.1.100                                                 #删除IP地址

    ifconfig eth0 add 3ffe:3240:800:1005::2/64
    ifconfig eth0 del 3ffe:3240:800:1005::2/64

其他
    ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE        #修改MAC地址

    ifconfig eth0 arp           #启用arp
    ifconfig eth0 -arp          #禁用arp:禁用arp的时候,可以看到出现NOARP字段。


    ifconfig eth0 mtu 1500      #设置最大传输单元

    ifconfig eth0 promisc       #启用网卡的promiscuous模式:网卡将接收网络中发给它所有的数据包。当启用时出现PROMISC字段。
    ifconfig eth0 -promisc      #禁用网卡的promiscuous模式

    ifconfig eth0 allmulti      #启用网卡的多播模式:当启用时会出现MULTICAST字段。
    ifconfig eth0 -allmulti     #禁用网卡的多播模式

---------------------------------------------------------------------------------------
ifconfig命令显示信息解读
[root@localhost ~]# ifconfig eth0
 
// UP:表示“接口已启用”。
// BROADCAST :表示“主机支持广播”。
// RUNNING:表示“接口在工作中”。
// MULTICAST:表示“主机支持多播”。
// MTU:1500(最大传输单元):1500字节
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 
 
// inet :网卡的IP地址。
// netmask :网络掩码。
// broadcast :广播地址。
inet 192.168.1.135 netmask 255.255.255.0 broadcast 192.168.1.255
 
 
// 网卡的IPv6地址
inet6 fe80::2aa:bbff:fecc:ddee prefixlen 64 scopeid 0x20<link>
 
// 连接类型:Ethernet (以太网) HWaddr (硬件mac地址)
// txqueuelen (网卡设置的传送队列长度)
ether 00:aa:bb:cc:dd:ee txqueuelen 1000 (Ethernet)
 
 
// RX packets 接收时,正确的数据包数。
// RX bytes 接收的数据量。
// RX errors 表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
// RX dropped 表示数据包已经进入了 Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃。
    这个表示内存满了???
// RX overruns 表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。很明显,overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了,而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一,上面那台有问题的机器就是因为 interruprs 分布的不均匀 (都压在 core0),没有做 affinity 而造成的丢包。
    这个看起来是网卡的传输速度大于内核在内存的IO速度,网卡缓存满导致丢包。诱因可能是cpu性能不足or CPU负载高???
// RX frame 接收时,发生frame错误而丢失的数据包数。
RX packets 2825 bytes 218511 (213.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
 
 
 
// TX packets 发送时,正确的数据包数。
// TX bytes 发送的数据量。
// TX errors 发送时,产生错误的数据包数。
// TX dropped 发送时,丢弃的数据包数。
// TX overruns 发送时,由于速度过快而丢失的数据包数。
// TX carrier 发送时,发生carrier错误而丢失的数据包数。
// collisions 冲突信息包的数目。
TX packets 1077 bytes 145236 (141.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig 命令;ifconfig命令显示信息解读
ifconfig、ip -s addr 输出解析
================================================================================================
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
      inet 10.240.0.30 netmask 255.240.0.0 broadcast 10.255.255.255
      inet6 fe80::20d:3aff:fe07:cf2a prefixlen 64 scopeid 0x20<link>
      ether 78:0d:3a:07:cf:3a txqueuelen 1000 (Ethernet)
      RX packets 40809142 bytes 9542369803 (9.5 GB)
      RX errors 0 dropped 0 overruns 0 frame 0
      TX packets 32637401 bytes 4815573306 (4.8 GB)
      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
​
$ ip -s addr show dev eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
      link/ether 78:0d:3a:07:cf:3a brd ff:ff:ff:ff:ff:ff
      inet 10.240.0.30/12 brd 10.255.255.255 scope global eth0
          valid_lft forever preferred_lft forever
      inet6 fe80::20d:3aff:fe07:cf2a/64 scope link
          valid_lft forever preferred_lft forever
      RX: bytes packets errors dropped overrun mcast
       9542432350 40809397 0       0       0       193
      TX: bytes packets errors dropped carrier collsns
       4815625265 32637658 0       0       0       0

第一,网络接口的状态标志。ifconfig 输出中的 RUNNING ,或 ip 输出中的 LOWER_UP ,都表示物理网络是连通的,即网卡已经连接到了交换机或者路由器中。如果你看不到它们,通常表示网线被拔掉了。
第二,MTU 的大小。MTU 默认大小是 1500,根据网络架构的不同(比如是否使用了 VXLAN 等叠加网络),你可能需要调大或者调小 MTU 的数值。
第三,网络接口的 IP 地址、子网以及 MAC 地址。这些都是保障网络功能正常工作所必需的,你需要确保配置正确。
第四,网络收发的字节数、包数、错误数以及丢包情况,特别是 TX 和 RX 部分的 errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,通常表示出现了网络 I/O 问题。其中:
    errors 表示发生错误的数据包数,比如校验错误、帧同步错误等;
    dropped 表示丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包;
    overruns 表示超限数据包数,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理(队列满)而导致的丢包;
    carrier 表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;
    collisions 表示碰撞数据包数。

    倪朋飞 《Linux 性能优化实战》34 | 关于 Linux 网络,你必须知道这些(下)
ifconfig、ip -s addr 输出解析

 

sar命令;tsar命令
top # 实时显示进程状态    详见第7章:进程及相关命令 https://www.cnblogs.com/AllenWoo/p/14371880.html
========================================================================================================================
sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,
包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等,sar命令有sysstat安装包安装。
安装工具:yum install sysstat -y
参数:
    -u            CPU 资源监控
    -v            inode、文件和其他内核表监控
    -r            内存和交换空间监控
    -B            内存分页监控
    -b            I/O 和传送速率监控
    -q            进程队列长度和平均负载状态监控
    -W            系统交换活动信息监控
    -o test     并将采样结果以二进制形式存入当前目录下的文件 test 中
    -n          使用6个不同的开关:DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6和UDP6 ,
                    DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。


用法示例:
sar             #默认查看cpu;历史使用率,10分钟采集一次
sar 2 3         #采集并显示实时数据,2秒一次,共采集3次
sar -u          #查看cpu历史使用率
sar -r          #查看内存历史使用率
sar -n DEV 1 1          #统计网络接口设备通信信息
sar -n EDEV  1 1        #统计网络接口设备通信失败信息

    sar -n 使用总结
    -n DEV : 网络接口统计信息。
    -n EDEV : 网络接口错误。
    -n IP : IP数据报统计信息。
    -n EIP : IP错误统计信息。
    -n TCP : TCP统计信息。
    -n ETCP : TCP错误统计信息。
    -n SOCK : 套接字使用。



结果表项说明:
https://blog.csdn.net/wdwangye/article/details/105614678
https://www.cnblogs.com/howhy/p/6396437.html


------------------------------------------------------------------------------------------------------------------------------
tsar 是淘宝自己开发的一个采集工具,主要用来收集服务器的系统信息(如 cpu,io,mem,tcp等),以及应用数据(如 squid haproxy nginx 等)。
收集到的数据存储在磁盘上,可以随时查询历史信息,输出方式灵活多样,另外支持将数据存储到 MySQL 中,也可以将数据发送到 nagios 报警服务器。
tsar 在展示数据时,可以指定模块,并且可以对多条信息的数据进行 merge 输出,带–live 参数可以输出秒级的实时信息总体架构

tsar安装完成后,会产生一个定时任务,每分钟以 root 用户的角色调用 tsar 命令来执行数据采集。
日志文件轮转 : /etc/logrotate.d/tsar;在日志文件轮转配置中,每个月会把 tsar 的本地存储进行轮转,此外这里也设定了数据在/var/log/tsar.data 下


tsar -i 1 -l            #以 1 秒钟为间隔,实时打印 tsar 的概述数据
tsar --io --check       #查看磁盘io情况
tsar --swap --check     #显示一天历史总汇信息,默认间隔5秒
tsar --cpu -i           #一天之中每5分钟间隔cpu信息
tsar --live --mem - i 2       #时间间隔为两秒实时输出(每两秒输出一次)
tsar --mem              #打印当天内存信息,默认间隔时间为5秒钟

tsar --cpu              监控系统的cpu
tsar --swap --load      监控虚存和load情况
tsar --mem              监控内存使用情况
tsar --io               监控系统IO情况
tsar --traffic          监控网络统计
tsar --check --cpu --io     查看最后一次tsar的提醒信息,这里包括了系统的cpu,io的告警情况
tsar --load -d 20200208     指定日期
tsar -d 2 -i 1              通过参数-d 2 可以查出两天前到现在的数据,-i 1 表示以每次1分钟作为采集显示
tsar --partition -I /u01    查看fstab指定挂载的系统目录的使用情况 ,-I 指定查看某个目录



https://blog.csdn.net/yunweimao/article/details/106688059
sar命令;tsar命令

 

ss命令;netstat命令
===========================================================================================
ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。
    -t, --tcp 仅显示 TCP套接字(sockets)
    -u, --udp 仅显示 UCP套接字(sockets)
    -w, --raw 仅显示 RAW套接字(sockets)
    -x, --unix 仅显示 Unix套接字(sockets)
    -l, --listening 显示监听状态的套接字(sockets)
    -a, --all 显示所有套接字(sockets)
    -n, --numeric 不解析服务名称
    -p, --processes 显示使用套接字(socket)的进程
    -e, --extended       显示详细的套接字(sockets)信息
    -m, --memory         显示套接字(socket)的内存使用情况
    -o, --options        显示计时器信息

    -h, --help 帮助信息
    -V, --version 程序版本信息
    -r, --resolve        解析主机名
    -i, --info 显示 TCP内部信息
    -s, --summary 显示套接字(socket)使用概况
    -4, --ipv4           仅显示IPv4的套接字(sockets)
    -6, --ipv6           仅显示IPv6的套接字(sockets)
    -0, --packet         显示 PACKET 套接字(socket)
    -d, --dccp 仅显示 DCCP套接字(sockets)
    -f, --family=FAMILY  显示 FAMILY类型的套接字(sockets),FAMILY可选,支持  unix, inet, inet6, link, netlink
    -A, --query=QUERY, --socket=QUERY
        QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
    -D, --diag=FILE     将原始TCP套接字(sockets)信息转储到文件
    -F, --filter=FILE   从文件中都去过滤器信息
        FILTER := [ state TCP-STATE ] [ EXPRESSION ]

ss的功能比netstat更丰富:相似的功能用法相似,且有新增功能
    1.查看占用各种占用端口的进程的网络信息(用法与netstat基本相同,显示内容略有不同)
        ss -t     #显示处于ESTABLISHED状态的TCP连接
        ss -ta    #显示所有TCP连接
        ss -ua    #显示所有UDP连接
        ss -l       #列出所有打开的网络连接端口
        ss -pl      #查看进程使用的socket
    2.可以根据IP、源端口、目的端口、连接状态进行过滤
        ss -o state established '( dport = :smtp or sport = :smtp )'        #显示所有状态为established的SMTP连接
        ss -o state established '( dport = :http or sport = :http )'        #显示所有状态为Established的HTTP连接
        ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24   #列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字
        ss dst ADDRESS_PATTERN              #匹配远程地址和端口号
        ss dst 192.168.1.5
        ss dst 192.168.119.113:http 
        ss dst 192.168.119.113:smtp 
        ss dst 192.168.119.113:443
        ss src ADDRESS_PATTERN              #匹配本地地址和端口号
        ss src 192.168.119.103
        ss src 192.168.119.103:http
        ss src 192.168.119.103:80
        ss src 192.168.119.103:smtp
        ss src 192.168.119.103:25

    3.网络接口的统计数据
        ss -s       #显示 Sockets 摘要

    4.其他
        ss -4 state FILTER-NAME-HERE        #用TCP 状态过滤Sockets
        ss -6 state FILTER-NAME-HERE

        ss dport OP PORT                    #将本地或者远程端口和一个数比较
        ss sport OP PORT
        ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。
            OP 可以代表以下任意一个: 
            <= or le : 小于或等于端口号
            >= or ge : 大于或等于端口号
            == or eq : 等于端口号
            != or ne : 不等于端口号
            < or gt : 小于端口号
            > or lt : 大于端口号
        time netstat -at        #ss 和 netstat 效率对比
        time ss                 #ss 和 netstat 效率对比

-----------------------------------------------------------------------------------------------
netstat 指令可让你得知整个 Linux 系统的网络情况。(netstat是过时命令,建议使用ss)
    -t或--tcp 显示TCP传输协议的连线状况。
    -u或--udp 显示UDP传输协议的连线状况。
    -w或--raw 显示RAW传输协议的连线状况。
    -l或--listening 显示监控中的服务器的Socket。
    -a或--all 显示所有连线中的Socket。
    -n或--numeric 直接使用IP地址,而不通过域名服务器。
    -e或--extend 显示网络其他相关信息。
    -p或--programs 显示正在使用Socket的程序识别码和程序名称。

    1.查看占用各种占用端口的进程的网络信息
        netstat建议带上参数-n,不需要反向解析成域名,工作效率更高
        netstat -a      #显示详细的网络状况
        netstat -nua    #显示所有UDP的连接状况
        netstat -nt     #显示所有有状态的TCP的连接,默认不显示处于监听状态的TCP 端口
        netstat -nta    #显示所有TCP的连接
        netstat -ntl    #显示处于监听状态的TCP 端口
        netstat -ntul   #显示TCP、UDP处于listen状态的进程
        netstat -ntulp  #显示TCP、UDP处于listen状态的进程,p为显示进程ID和程序名
        netstat -ntu    #显示有状态的连接(例如显示处于ESTABLISHED、TIME_WAIT状态的TCP连接;因为udp为无状态连接,所以看不到udp)
        netstat -ntup   #同上,多显示了进程ID和程序名
        netstat -ltup   #不加n则会多ip进行反向解析
    2.网络接口的统计数据
        netstat -i          #查看所有接口的统计数据
        netstat -I=eth0     #查看指定接口的统计数据
        ifconfig -s eth0    #查看指定接口的统计数据
    3.显示路由表
        netstat -r      #显示内核路由表
ss命令;netstat命令
套接字信息:netstat -nlp、ss -ltnp;协议栈统计信息:netstat -s、ss -s
================================================================================================
$ netstat -nlp | head -n 3      # -p 表示显示进程信息
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      840/systemd-resolve


$ ss -ltnp | head -n 3          # -p 表示显示进程信息
    State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port
    LISTEN   0         128           127.0.0.53%lo:53               0.0.0.0:*        users:(("systemd-resolve",pid=840,fd=13))
    LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=1459,fd=3))


接收队列(Recv-Q)和发送队列(Send-Q)需要你特别关注,它们通常应该是 0。当你发现它们不是 0 时,说明有网络包的堆积发生。

在不同套接字状态下,它们的含义不同:
    当套接字处于连接状态(Established)时,
        Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数(即接收队列长度)。
        而 Send-Q 表示还没有被远端主机确认的字节数(即发送队列长度)。

    当套接字处于监听状态(Listening)时,
        Recv-Q 表示全连接队列的长度。
        而 Send-Q 表示全连接队列的最大长度。

所谓全连接,是指服务器收到了客户端的 ACK,完成了 TCP 三次握手,然后就会把这个连接挪到全连接队列中。这些全连接中的套接字,还需要被 accept() 系统调用取走,服务器才可以开始真正处理客户端的请求。
与全连接队列相对应的,还有一个半连接队列。所谓半连接是指还没有完成 TCP 三次握手的连接,连接只进行了一半。服务器收到了客户端的 SYN 包后,就会把这个连接放到半连接队列中,然后再向客户端发送 SYN+ACK 包。

---------------------------------------------------------------------------------------------------
协议栈统计信息

$ netstat -s
    ...
    Tcp:
        3244906 active connection openings
        23143 passive connection openings
        115732 failed connection attempts
        2964 connection resets received
        1 connections established
        13025010 segments received
        17606946 segments sent out
        44438 segments retransmitted
        42 bad segments received
        5315 resets sent
        InCsumErrors: 42
    ...
$ ss -s
    Total: 186 (kernel 1446)
    TCP:   4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
    Transport Total     IP        IPv6
    *    1446      -         -
    RAW    2         1         1
    UDP    2         2         0
    TCP    4         3         1
    ...

ss 只显示已经连接、关闭、孤儿套接字等简要统计,而 netstat 则提供的是更详细的网络协议栈信息。



倪朋飞 《Linux 性能优化实战》34 | 关于 Linux 网络,你必须知道这些(下)
套接字信息:netstat -nlp、ss -ltnp;协议栈统计信息:netstat -s、ss -s

 

netstat -s | grep frag
1736 fragments failed #proxy bond0与ecs同网段的故障场景,首包走lsw,协商的mtu;非首包走bond0,数据包分段失败

posted @ 2022-08-21 20:06  雲淡風輕333  阅读(105)  评论(0编辑  收藏  举报