【转】一文掌握 Linux 性能分析之网络篇

比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看、监控,又包括网络链路上的包转发时延、吞吐量、带宽等指标分析。包括但不限于以下分析工具:

  • ping:测试网络连通性
  • ifconfig:接口配置
  • ip:网络接口统计信息
  • netsat:多种网络栈和接口统计信息
  • ifstat:接口网络流量监控工具
  • netcat:快速构建网络连接
  • tcpdump:抓包工具
  • sar:统计信息历史
  • traceroute:测试网络路由
  • pathchar:确定网络路径特征
  • dtrace:TCP/IP 栈跟踪
  • iperf / netperf / netserver:网络性能测试工具
  • perf 性能分析神器

本文先来看前面 7 个。

ping

ping 发送 ICMP echo 数据包来探测网络的连通性,除了能直观地看出网络的连通状况外,还能获得本次连接的往返时间(RTT 时间),丢包情况,以及访问的域名所对应的 IP 地址(使用 DNS 域名解析),比如:

我们 ping baidu.com,-c 参数指定发包数。可以看到,解析到了 baidu 的一台服务器 IP 地址为 220.181.112.244。RTT 时间的最小、平均、最大和算术平均差分别是 40.732ms、40.762ms、40.791ms 和 0.248。

ifconfig

ifconfig 命令被用于配置和显示 Linux 内核中网络接口的统计信息。通过这些统计信息,我们也能够进行一定的网络性能调优。

1)ifconfig 显示网络接口配置信息

其中,RX/TX packets 是对接收/发送数据包的情况统计,包括错误的包,丢掉多少包等。RX/TX bytes 是接收/发送数据字节数统计。其余还有很多参数,就不一一述说了,性能调优时可以重点关注 MTU(最大传输单元) 和 txqueuelen(发送队列长度),比如可以用下面的命令来对这两个参数进行微调:

Copy

ifconfig eth0 txqueuelen 2000
ifconfig eth0 mtu 1500 

2)网络接口地址配置

ifconfig 还常用来配置网口的地址,比如:
为网卡配置和删除IPv6地址:

Copy

ifconfig eth0 add 33ffe:3240:800:1005::2/64    #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64    #为网卡eth0删除IPv6地址

修改MAC地址:

Copy

ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE

配置IP地址:

Copy

ifconfig eth0 192.168.2.10
ifconfig eth0 192.168.2.10 netmask 255.255.255.0
ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255

IP

ip 命令用来显示或设置 Linux 主机的网络接口、路由、网络设备、策略路由和隧道等信息,是 Linux 下功能强大的网络配置工具,旨在替代 ifconfig 命令,如下显示 IP 命令的强大之处,功能涵盖到 ifconfig、netstat、route 三个命令。

netstat

netstat 可以查看整个 Linux 系统关于网络的情况,是一个集多钟网络工具于一身的组合工具。
常用的选项包括以下几个:

  • 默认:列出连接的套接字
  • -a:列出所有套接字的信息
  • -s:各种网络协议栈统计信息
  • -i:网络接口信息
  • -r:列出路由表
  • -l:仅列出有在 Listen 的服务状态
  • -p:显示 PID 和进程名称

各参数组合使用实例如下:

  • netstat -at 列出所有 TCP 端口
  • netstat -au 列出所有 UDP 端口
  • netstat -lt 列出所有监听 TCP 端口的 socket
  • netstat -lu 列出所有监听 UDP 端口的 socket
  • netstat -lx 列出所有监听 UNIX 端口的 socket
  • netstat -ap | grep ssh 找出程序运行的端口
  • netstat -an | grep ‘:80‘ 找出运行在指定端口的进程

1)netstat 默认显示连接的套接字数据

整体上来看,输出结果包括两个部分:

  • Active Internet connections :有源 TCP 连接,其中 Recv-Q 和 Send-Q 指的是接收队列和发送队列,这些数字一般都是 0,如果不是,说明请求包和回包正在队列中堆积。
  • Active UNIX domain sockets:有源 UNIX 域套接口,其中 proto 显示连接使用的协议,RefCnt 表示连接到本套接口上的进程号,Types 是套接口的类型,State 是套接口当前的状态,Path 是连接到套接口的进程使用的路径名。

2)netstat -i 显示网络接口信息

接口信息包括网络接口名称(Iface)、MTU,以及一系列接收(RX-)和传输(TX-)的指标。其中 OK 表示传输成功的包,ERR 是错误包,DRP 是丢包,OVR 是超限包。

这些参数有助于我们对网络收包情况进行分析,从而判断瓶颈所在。

3)netstat -s 显示所有网络协议栈的信息

可以看到,这条命令能够显示每个协议详细的信息,这有助于我们针对协议栈进行更细粒度的分析。

4)netstat -r 显示路由表信息

这条命令能够看到主机路由表的一个情况。当然查路由我们也可以用 ip route 和 route 命令,这个命令显示的信息会更详细一些。

ifstat

ifstat 主要用来监测主机网口的网络流量,常用的选项包括:

  • -a:监测主机所有网口
  • -i:指定要监测的网口
  • -t:在每行输出信息前加上时间戳
  • -b:以 Kbit/s 显示流量数据,而不是默认的 KB/s
  • -delay:采样间隔(单位是 s),即每隔 delay 的时间输出一次统计信息
  • -count:采样次数,即共输出 count 次统计信息

比如,通过以下命令统计主机所有网口某一段时间内的流量数据:

可以看出,分别统计了三个网口的流量数据,前面输出的时间戳,有助于我们统计一段时间内各网口总的输入、输出流量。

netcat

netcat,简称 nc,命令简单,但功能强大,在排查网络故障时非常有用,因此它也在众多网络工具中有着“瑞士军刀”的美誉。

它主要被用来构建网络连接。可以以客户端和服务端的方式运行,当以服务端方式运行时,它负责监听某个端口并接受客户端的连接,因此可以用它来调试客户端程序;当以客户端方式运行时,它负责向服务端发起连接并收发数据,因此也可以用它来调试服务端程序,此时它有点像 Telnet 程序。

常用的选项包括以下几种:

  • -l:以服务端的方式运行,监听指定的端口。默认是以客户端的方式运行。
  • -k:重复接受并处理某个端口上的所有连接,必须与 -l 一起使用。
  • -n:使用 IP 地址表示主机,而不是主机名,使用数字表示端口号,而不是服务名称。
  • -p:当以客户端运行时,指定端口号。
  • -s:设置本地主机发出的数据包的 IP 地址。
  • -C:将 CR 和 LF 两个字符作为结束符。
  • -U:使用 UNIX 本地域套接字通信。
  • -u:使用 UDP 协议通信,默认使用的是 TCP 协议。
  • -w:如果 nc 客户端在指定的时间内未检测到任何输入,则退出。
  • -X:当 nc 客户端与代理服务器通信时,该选项指定它们之间的通信协议,目前支持的代理协议包括 “4”(SOCKS v.4),“5”(SOCKS v.5)和 “connect” (HTTPs Proxy),默认使用 SOCKS v.5。
  • -x:指定目标代理服务器的 IP 地址和端口号。

下面举一个简单的例子,使用 nc 命令发送消息:

首先,启动服务端,用 nc -l 0.0.0.0 12345 监听端口 12345 上的所有连接。

然后,启动客户端,用 nc -p 1234 127.0.0.1 12345 使用 1234 端口连接服务器 127.0.0.1::12345。

接着就可以在两端互发数据了。这里只是抛砖引玉,更多例子大家可以多实践。

tcpdump

最后是 tcpdump,强大的网络抓包工具。虽然有 wireshark 这样更易使用的图形化抓包工具,但 tcpdump 仍然是网络排错的必备利器。

tcpdump 选项很多,我就不一一列举了,大家可以看文章末尾的引用来进一步了解。这里列举几种 tcpdump 常用的用法。

1)捕获某主机的数据包

比如想要捕获主机 200.200.200.100 上所有收到和发出的所有数据包,使用:

Copy

tcpdump host 200.200.200.100

2)捕获多个主机的数据包

比如要捕获主机 200.200.200.1 和主机 200.200.200.2 或 200.200.200.3 的通信,使用:

Copy

tcpdump host 200.200.200.1 and \(200.200.200.2 or \)

同样要捕获主机 200.200.200.1 除了和主机 200.200.200.2 之外所有主机通信的 IP 包。使用:

Copy

tcpdump ip host 200.200.200.1 and ! 200.200.200.2

3)捕获某主机接收或发出的某种协议类型的包

比如要捕获主机 200.200.200.1 接收或发出的 Telnet 包,使用:

Copy

tcpdump tcp port 23 host 200.200.200.1

4)捕获某端口相关的数据包

比如捕获在端口 6666 上通过的包,使用:

Copy

tcpdump port 6666

5)捕获某网口的数据包

比如捕获在网口 eth0 上通过的包,使用:

Copy

tcpdump -i eth0

下面还是举个例子,抓取 TCP 三次握手的包:(具体抓包的过程请移步到我的公众号进一步了解,那里阅读体验好一点,谢谢。)

总结:

本文总结了几种初级的网络工具,基本的网络性能分析,通过组合以上几种工具,基本都能应付,但对于复杂的问题,以上工具可能就无能为力了。更多高阶的工具将在下文送上,敬请期待。

参考:
基础 http://kuring.me/post/linux_net_tools/

讲 ip 和 ifconfig 很强大的一篇文章:

https://blog.csdn.net/freeking101/article/details/68939059

https://www.alibabacloud.com/help/zh/faq-detail/55757.htm

性能之巅:Linux网络性能分析工具http://www.infoq.com/cn/articles/linux-networking-performance-analytics
抓包工具tcpdump用法说明 https://www.cnblogs.com/f-ck-need-u/p/7064286.html
https://www.shiyanlou.com/courses/92

http://linuxtools-rst.readthedocs.io/zh_CN/latest/index.html

https://www.shiyanlou.com/courses/92/labs/972/document

原文地址:https://www.cnblogs.com/langqi250/p/10532976.html

时间: 2024-10-07 18:58:48

【转】一文掌握 Linux 性能分析之网络篇的相关文章

【转】一文掌握 Linux 性能分析之网络篇(续)

在上篇网络篇中,我们已经介绍了几个 Linux 网络方向的性能分析工具,本文再补充几个.总结下来,余下的工具包括但不限于以下几个: sar:统计信息历史 traceroute:测试网络路由 dtrace:TCP/IP 栈跟踪 iperf / netperf / netserver:网络性能测试工具 perf 性能分析神器 由于篇幅有限,本文会先介绍前面两个,其他工具留作后面介绍,大家可以持续关注. sar sar 是一个系统历史数据统计工具.统计的信息非常全,包括 CPU.内存.磁盘 I/O.网

【原创】一文掌握 Linux 性能分析之 I/O 篇

本文首发于我的公众号 CloudDeveloper(ID: cloud_dev),专注于干货分享,号内有大量书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 一文掌握 Linux 性能分析之 CPU 篇 一文掌握 Linux 性能分析之内存篇 这是 Linux 性能分析系列的第三篇,前两篇分别讲了 CPU 和 内存,本篇来看 IO. IO 和 存储密切相关,存储可以概括为磁盘,内存,缓存,三者读写的性能差距非常大,磁盘读写是毫秒级的(一般 0.1-10ms),内存读

超全整理!Linux性能分析工具汇总合集

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列. 本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性

Linux 性能分析工具汇总合集

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列. 本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性

Linux性能分析工具汇总合集

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列. 本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性

vmstat命令详解——linux性能分析

版本信息: procps version 3.2.8 基本使用: vmstat [-a] [-n] [-t] [-S unit] [delay [ count]] [-a]:显示活跃和非活跃内存 [-n]:只在开始时显示一次字段名,针对多次收集信息的情况输出人性化一点 [-t]:在每条信息的末尾,显示收集信息的时间 [-S unit]:使用指定单位显示.参数有 k .K .m .M ,分别代表1000.1024.1000000.1048576字节(byte).默认单位为K(1024 bytes)

iostat命令详解——linux性能分析

之前总结uptime和free命令,今天继续来总结一下iostat.给自己留个笔记,同时也希望对大家有用. 版本信息: sysstat version 9.0.4 (C) Sebastien Godard (sysstat <at> orange.fr) 基本使用:            iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ]  [ -z ] [ device [...] | ALL

Linux性能分析之mpstat&iostat&sar&vmstat

安装sysstat rpm包就有iostat.mpstat.sar.sa的功能,rpm –Uvh sysstat* mpstat 另一个用于获取 CPU 相关统计信息的有用的命令是 mpstat.下面是一个示例输出: # mpstat -P ALL 5 2 Linux 2.6.9-67.ELsmp (oraclerac1)       12/20/2008 10:42:38 PM  CPU  %user   %nice %system %iowait    %irq  %soft   %idle

三种Linux性能分析工具的比较

无论是在CPU设计.服务器研发还是存储系统开发的过程中,性能总是一个绕不过去的硬指标.很多时候,我们发现系统功能完备,但就是性能不尽如意,这时候就需要找到性能瓶颈.进行优化.首先我们需要结合硬件特点.操作系统和应用程序的特点深入了解系统内部的运行机制.数据流图和关键路径,最好找出核心模块.建立起抽象模型:接着需要利用各种性能分析工具,探测相关模块的热点路径.耗时统计和占比.在这方面,Linux操作系统自带了多种灵活又具有专对性的工具,此外一些厂家也开源了不少优秀的性能分析工具.下面就结合笔者最近