编者按:InfoQ开设新栏目“品味书香”,精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注。本文节选自格雷格著《性能之巅:洞悉系统、企业与云计算》中第10.6节,介绍了其中Linux部分网络性能分析工具的使用方法。

\\

本文介绍基于Linux操作系统的网络性能分析工具。它们的使用策略参见前面的部分。

\\

本节介绍的工具列于下表中。

\\

\\t\t\t

Linux

\\t\t\t

\\t\t\t

Solaris

\\t\t\t

\\t\t\t

描述

\\t\t\t

\\t\t\t

netstat

\\t\t\t

\\t\t\t

netstat

\\t\t\t

\\t\t\t

多种网络栈和接口统计信息

\\t\t\t

\\t\t\t

sar

\\t\t\t

\\t\t\t

-

\\t\t\t

\\t\t\t

统计信息历史

\\t\t\t

\\t\t\t

ifconfig

\\t\t\t

\\t\t\t

ifconfig

\\t\t\t

\\t\t\t

接口配置

\\t\t\t

\\t\t\t

ip

\\t\t\t

\\t\t\t

dladm

\\t\t\t

\\t\t\t

网络接口统计信息

\\t\t\t

\\t\t\t

nicstat

\\t\t\t

\\t\t\t

nicstat

\\t\t\t

\\t\t\t

网络接口吞吐量和使用率

\\t\t\t

\\t\t\t

ping

\\t\t\t

\\t\t\t

ping

\\t\t\t

\\t\t\t

测试网络连通性

\\t\t\t

\\t\t\t

traceroute

\\t\t\t

\\t\t\t

traceroute

\\t\t\t

\\t\t\t

测试网络路由

\\t\t\t

\\t\t\t

pathchar

\\t\t\t

\\t\t\t

pathchar

\\t\t\t

\\t\t\t

确定网络路径特征

\\t\t\t

\\t\t\t

tcpdump

\\t\t\t

\\t\t\t

snoop/tcpdump

\\t\t\t

\\t\t\t

网络数据包嗅探器

\\t\t\t

\\t\t\t

Wireshark

\\t\t\t

\\t\t\t

Wireshark

\\t\t\t

\\t\t\t

图形化网络数据包检查器

\\t\t\t

\\t\t\t

DTrace, perf

\\t\t\t

\\t\t\t

DTrace

\\t\t\t

\\t\t\t

TCP/IP栈跟踪:连接、数据包、丢包、延时

\\t\t\t

\\

本文将仅介绍Linux系统中的前7个网络性能分析工具。一开始是系统层面的统计数据,进而向下挖掘到包嗅探和事件跟踪。完整的功能请参考这些工具的文档,包括Man手册。

\\

netstat

\\

基于使用的选项,netstat(8)命令能报告多种类型的网络统计数据,就像具有多种功能的组合工具。选项介绍如下:

\\

  • (默):列出连接的套接字。\\t
  • -a列出所有套接字的信息。\\t
  • -s网络栈统计信息。\\t
  • -i网络接口信息。\\t
  • -r列出路由表。\

其他选项能修改输出,例如-n不解析IP地址为主机名,以及-v(可用时)显示冗长的详细信息。

\\

一个netstat(8)接口统计信息的示例如下:

\\

\\

数据列包括网络接口(Iface)、MTU以及一系列接收(RX-)和传输(TX-)的指标。

\\

  • OK成功传输的数据包。\\t
  • ERR错误数据包。\\t
  • DRP丢包。\\t
  • OVR超限。\

丢包和超限是网络接口的指针,并且能和错误一起用USE方法检查。

\\

-c连续模式能与-i一并使用,每秒输出这些累积的计数器。它提供计算数据包速率的数据。

\\

下面是一个netstat(8)网络栈统计数据(片段)的示例:

\\

\\

\\

输出列出了多项按协议分组的网络数据,主要是来自TCP的。所幸的是,其中多数有较长的描述性名称,因此它们的意思显而易见。不幸的是这些输出缺乏一致性而且有拼写错误,用程序处理这段文字比较麻烦。

\\

许多与性能相关的指标以加粗强调,用以指出可用的信息。其中许多指标要求对TCP行为的深刻理解,包括近些年引入的的最新功能和算法。下面是一些值得查找的示例指标。

\\

  • 相比接收的总数据包更高速的包转发率:检查服务器是否应该转发(路由)数据包。\\t
  • 开放的被动连接:监视它们能显示客户机连接负载。\\t
  • 相比发送的数据段更高的数据段重传输率:能支持网络的不稳定。这可能是意料之中的(互联网客户)。\\t
  • 套接字缓冲超限导致的数据包从接收队列中删除:这是网络饱和的标志,能够通过增加套接字缓冲来修复——前提是有足够的系统资源支持应用程序。\

一些统计信息名称包括拼写错误。如果其他的监视工具建立在同样的输出上,简单地修复它们可能有问题。这类工具最好能从/proc资源读取这些统计信息,它们是/proc/net/snmp和/proc/net/netstat。例如:

\\

\\

/proc/net/snmp统计信息也用于SNMP管理信息库(MIB),它提供关于每个统计信息的用途的更进一步的文档。扩展的统计信息在/proc/net/netstat中。

\\

netstat(8)可以接受以秒为单位的时间间隔,它按每个时间间隔连续地输出累加的计数器。后期处理这些输出可以计算每个计数器的速率。

\\

sar

\\

系统活动报告工具sar(1)可以观测当前活动并且能配置为保存和报告历史统计数据。第4章中介绍过它,并且本书的多个章节在需要时也会提及它。

\\

Linux版本用以下选项提供网络统计信息。

\\

  • -n DEV网络接口统计信息。\\t
  • -n EDEV网络接口错误。\\t
  • -n IPIP数据报统计信息。\\t
  • -n EIPIP错误统计信息。\\t
  • -n TCPTCP统计信息。\\t
  • -n ETCPTCP错误统计信息。\\t
  • -n SOCK套接字使用。\

提供的统计信息见下表。

\\

\\t\t\t

选项

\\t\t\t

\\t\t\t

统计信息

\\t\t\t

\\t\t\t

描述

\\t\t\t

\\t\t\t

单位

\\t\t\t

\\t\t\t

-n DEV

\\t\t\t

\\t\t\t

rxpkg/s

\\t\t\t

\\t\t\t

接收的数据包

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n DEV

\\t\t\t

\\t\t\t

txpkt/s

\\t\t\t

\\t\t\t

传输的数据包

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n DEV

\\t\t\t

\\t\t\t

rxkB/s

\\t\t\t

\\t\t\t

接收的千字节

\\t\t\t

\\t\t\t

千字节/s

\\t\t\t

\\t\t\t

-n DEV

\\t\t\t

\\t\t\t

txkB/s

\\t\t\t

\\t\t\t

传输的千字节

\\t\t\t

\\t\t\t

千字节/s

\\t\t\t

\\t\t\t

-n EDEV

\\t\t\t

\\t\t\t

rxerr/s

\\t\t\t

\\t\t\t

接收数据包错误

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n EDEV

\\t\t\t

\\t\t\t

txerr/s

\\t\t\t

\\t\t\t

传输数据包错误

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n EDEV

\\t\t\t

\\t\t\t

coll/s

\\t\t\t

\\t\t\t

碰撞

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n EDEV

\\t\t\t

\\t\t\t

rxdrop/s

\\t\t\t

\\t\t\t

接收数据包丢包(缓冲满)

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n EDEV

\\t\t\t

\\t\t\t

txdrop/s

\\t\t\t

\\t\t\t

传输数据包丢包(缓冲满)

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n EDEV

\\t\t\t

\\t\t\t

rxfifo/s

\\t\t\t

\\t\t\t

接收的数据包FIFO超限错误

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n EDEV

\\t\t\t

\\t\t\t

txfifo/s

\\t\t\t

\\t\t\t

传输的数据包FIFO超限错误

\\t\t\t

\\t\t\t

数据包/s

\\t\t\t

\\t\t\t

-n IP

\\t\t\t

\\t\t\t

irec/s

\\t\t\t

\\t\t\t

输入的数据报文(接收)

\\t\t\t

\\t\t\t

数据报文/s

\\t\t\t

\\t\t\t

-n IP

\\t\t\t

\\t\t\t

fwddgm/s

\\t\t\t

\\t\t\t

转发的数据报文

\\t\t\t

\\t\t\t

数据报文/s

\\t\t\t

\\t\t\t

-n IP

\\t\t\t

\\t\t\t

orq/s

\\t\t\t

\\t\t\t

输出的数据报文请求(传输)

\\t\t\t

\\t\t\t

数据报文/s

\\t\t\t

\\t\t\t

-n EIP

\\t\t\t

\\t\t\t

idisc/s

\\t\t\t

\\t\t\t

输入的丢弃(例如,缓冲满)

\\t\t\t

\\t\t\t

数据报文/s

\\t\t\t

\\t\t\t

-n EIP

\\t\t\t

\\t\t\t

odisc/s

\\t\t\t

\\t\t\t

输出的丢弃(例如,缓冲满)

\\t\t\t

\\t\t\t

数据报文/s

\\t\t\t

\\t\t\t

-n TCP

\\t\t\t

\\t\t\t

active/s

\\t\t\t

\\t\t\t

新的主动TCP连接(connect())

\\t\t\t

\\t\t\t

连接数/s

\\t\t\t

\\t\t\t

-n TCP

\\t\t\t

\\t\t\t

active/s

\\t\t\t

\\t\t\t

新的被动TCP连接(listen())

\\t\t\t

\\t\t\t

连接数/s

\\t\t\t

\\t\t\t

-n TCP

\\t\t\t

\\t\t\t

active/s

\\t\t\t

\\t\t\t

输入的段(接收)

\\t\t\t

\\t\t\t

段/s

\\t\t\t

\\t\t\t

-n TCP

\\t\t\t

\\t\t\t

active/s

\\t\t\t

\\t\t\t

输出的段(接收)

\\t\t\t

\\t\t\t

段/s

\\t\t\t

\\t\t\t

-n ETCP

\\t\t\t

\\t\t\t

active/s

\\t\t\t

\\t\t\t

主动TCP失败连接

\\t\t\t

\\t\t\t

连接数/s

\\t\t\t

\\t\t\t

-n ETCP

\\t\t\t

\\t\t\t

active/s

\\t\t\t

\\t\t\t

TCP段重传

\\t\t\t

\\t\t\t

段/s

\\t\t\t

\\t\t\t

-n SOCK

\\t\t\t

\\t\t\t

totsck

\\t\t\t

\\t\t\t

使用中的总数据包

\\t\t\t

\\t\t\t

sockets

\\t\t\t

\\t\t\t

-n SOCK

\\t\t\t

\\t\t\t

ip-frag

\\t\t\t

\\t\t\t

当前队列中的IP数据片

\\t\t\t

\\t\t\t

fragments

\\t\t\t

\\t\t\t

-n SOCK

\\t\t\t

\\t\t\t

tcp-tw

\\t\t\t

\\t\t\t

TIME-WAIT中的TCP套接字

\\t\t\t

\\t\t\t

sockets

\\t\t\t

\\

这里,许多统计信息名称包括方向和计量单位:rx是“接收”,i是“输入”,seg是“段”,依此类推。完整的列表参考Man手册,它包括ICMP、UDP、NFS和IPv6在内的统计信息以及对应的SNMP名称的说明(例如,ipInReceives对应irec/s)。

\\

以下示例是每秒打印的TCP统计信息:

\\

\\

\\

输出显示被动连接率(入站)接近30/s。

\\

网络接口统计信息列(NET)列出所有接口,然而通常只对一个接口感兴趣。以下示例利用awk(1)过滤输出:

\\

\\

这显示出传输和发送的网络吞吐量。这里双向的速率都超过了2MB/s。

\\

ifconfig

\\

ifconfig(8)命令能手动设置网络接口。它也可以列出所有接口的当前配置。用它来检查系统、网络以及路由设置有助于静态性能调优。

\\

Linux版本的输出包括以下这些统计信息:

\\

\\

这些计数器与之前介绍的netstat -i命令一致。txqueuelen是这个接口发送队列的长度。Man手册介绍了这个数值的调优:

\\

对于速度较低的高延时设备(调制解调器连接,ISDN),设置较小的值有助于预防高速的大量传输影响如telnet在内的交互通信。

\\

Linux中,ifconfig(8)已经被ip(8)命令淘汰。

\\

ip

\\

Linux的ip(8)命令能配置网络接口和路由,并且观测它们的状态和统计信息。例如,显示连接统计信息:

\\

\\

除了添加了接收(RX)和传输(TX)字节,这些计数器与之前介绍的netstat -i命令一致。这利于方便地观测吞吐量,不过ip(8)不提供按时间间隔输出报告的方式(利用sar(1))。

\\

nicstat

\\

最初为基于Solaris的系统编写,nicstat(1)这个开源工具输出包括吞吐量和使用率在内的网络接口统计信息。nicstat(1)延续传统的资源统计工具iostat(1M)mpstat(1M)的风格。用C和Perl编写的版本可用于基于Solaris和Linux的系统[3]。

\\

例如以下的1.92 Linux版本的输出:

\\

\\

最前面的输出是自系统启动以来的总结,紧接着是按时间间隔的总结。这里的时间间隔总结显示了eth4接口的使用率为35%(这里报告的是当前RX或者TX方向的最大值),并且读速度为42MB/s。

\\

字段包括接口名称(Int)、最大使用率(%Util)、反映接口饱和度的统计信息(Sat),以及一系列带前缀的统计信息:r是“读”(接收)而w是“写”(传输)。

\\

  • KB/s千字节每秒。\\t
  • Pk/s数据包每秒。\\t
  • Avs/s平均数据包大小,以字节为单位。\

该版本支持多种选项,包括-z用来忽略数值为0的行(闲置的接口)以及-t显示TCP统计信息。

\\

由于能提供使用率和饱和度数值,nicstat(1)特别适用于USE方法。

\\

ping

\\

ping(8)命令发送ICMP echo请求数据包测试网络连通性。例如:

\\

\\

输出显示每个包的往返时间(rtt)并总结各种统计信息。由于时间戳是由ping(8)命令自己计量的,其中包括获取时间戳到处理网络I/O的整个CPU代码路径执行时间。

\\

与应用程序协议相比,路由器可能以较低的优先级处理ICMP数据包,因而延时可能比通常情况下有更高的波动。

\\

traceroute

\\

traceroute(8)命令发出一系列数据包实验性地探测到一个主机当前的路由。它的实现利用了递增每个数据包IP协议的生存时间(TTL),从而导致网关顺序地发送ICMP超时响应报文,向主机揭示自己的存在(如果防火墙没有拦截它们)。

\\

例如测试一个加利福尼亚的主机与一个弗吉尼亚的目标间当前的路由:

\\

\\

\\

每一跳显示连续的三个RTT,它们可用作网络延时统计信息的粗略数据源。类似ping(8),由于发送低优先级的数据包,它可能会显示出比其他应用程序协议更高的延时。

\\

也可以把显示的路径作为静态性能调优的研究对象。网络被设计为动态的并且能响应故障。路径的变化可能会降低性能。

\\

书籍介绍

\\

\\

《性能之巅:洞悉系统、企业与云计算》基于Linux 和Solaris系统阐述了适用于所有系统的性能理论和方法,Brendan Gregg 将业界普遍承认的性能方法、工具和指标收集于本书之中。阅读本书,你能洞悉系统运作的方式,学习到分析和提高系统与应用程序性能的方法,这些性能方法同样适用于大型企业与云计算这类最为复杂的环境的性能分析与调优。

性能之巅:Linux网络性能分析工具相关推荐

  1. Linux下的网络协议分析工具-tcpdump快速入门手册

    TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一.sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的.对于网络管理人员来说,使 ...

  2. Linux 网络性能的 15 个优化建议【转自微信公众号菜鸟教程】

    Linux 网络在性能方面有哪些优化手段可用呢? 本文将给出一些开发或者运维中的 Linux 网络性能优化建议. 要注意的是,每一种性能优化方法都有它适用或者不适用的应用场景,应当根据当前的项目现状灵 ...

  3. linux下网络包分析工具下载,Wireshark下载-网络封包分析工具 v3.2.6 官方版 - 下载吧...

    Wireshark(前称Ethereal)是免费的网络协议检测程序,支持Unix,Windows.让您经由程序抓取运行的网站的相关资讯,包括每一封包流向及其内容.资讯可依操作系统语系看出,方便查看.监 ...

  4. 《Unix/Linux网络日志分析与流量监控》2014年11月底出版

    2014年11月 <Unix/Linux网络日志分析与流量监控>重磅新书出版 近日,历时3年创作的75万字书稿已完成,本书目前正在出版社清样阶段即将出版发行.本书紧紧围绕网络安全的主题,对 ...

  5. 网络管理员在预先分配和识别作为_14个网络管理员必备的最佳网络流量分析工具,收藏了...

    企业网络每天都会产生大量数据.企业可以分析这些数据,以深入了解网络运行情况或发现安全威胁.网络流量分析(NTA)解决方案允许网络管理员收集流经网络的流量数据.这些工具通常用于识别性能问题和/或发现安全 ...

  6. IOTA--最便捷的网络流量分析工具

    IOTA–最便捷的网络流量分析工具 近年来5G技术迅速的发展,整个我们整个的网络环境将迎来巨大变革,其中网络流量和宽带的剧增是其中的重要变革.这样的变化虽然给我们的工作和生活带来诸多便利,但是也带来了 ...

  7. 业界重磅新书《UNIX/Linux网络日志分析与流量监控》首发

    <UNIX/Linux网络日志分析与流量监控> 出版社官网: http://www.cmpbook.com/stackroom.php?id=39384 每本图书附赠51CTO学院的价值1 ...

  8. 网络数据采集分析工具tcpdump定义抓包过滤器

    Unix 下的一个 网络数据采集分析工具 -- Tcpdump,也就是我们常说的抓包工具. 与它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump ...

  9. [转]常用网络协议分析工具

    1:TCPDUMP,老牌的分析工具,最先在linux平台使用,现在也可以用于windows平台.命令行方式,2000年以前参加工作者最喜爱的工具,缺点无法分析四层以上协议.常用于检测2-3层网络问题. ...

  10. linux网络内核分析与开发 pdf,Linux网络内核分析与开发-肖宇峰.pdf

    嵌入式技术与应用丛书 Linux 网络内核 分析与开发 肖宇峰 李 昕 时 岩 编著 Publishing House of Electronics Industry 北京·BEIJING 目 录 第 ...

最新文章

  1. 3-runtime 之 Tagged Pointer
  2. leetcode897
  3. eq linux_linux之shell编程(二)
  4. 一次搞懂建模语言UML
  5. C语言学习之怎样引用指针变量
  6. C语言scanf:获取输入的内容
  7. 如何解决uchome自带编辑器无法获取uchome编辑器里面的值问题?(uchome二次开发)...
  8. Matlab无法使用GBK编码保存文件,改用UTF-8编码
  9. 网络调试分析的工具①
  10. 卡巴斯基破解版 KISV8.0.0.432 Beta 江南混混汉化特别版
  11. 程序读取斗罗大陆热点词汇热度
  12. python毕业设计总结范文大全_毕业设计心得体会范文3篇
  13. 短网址dwz.cn批量注册
  14. 插入法排序c语言程序,C语言直接插入排序算法
  15. Sa-Token中接口的限流
  16. 猿创征文 | openGauss 高级特性 DB4AI 进行 AI 开发
  17. 【Unity3D插件】EasyAR插件分享《AR使用及开发案例》
  18. php 宠物医院管理系统,爱心宠物医院管理系统
  19. 一夜身价暴涨千倍,如何发布你自己的 ICO?
  20. 滴滴自动驾驶 | 基础架构如何以终为始,稳定先行?

热门文章

  1. socket中的几个数据结构
  2. ES6新特性_ES6语法糖-子类对父类方法的重写---JavaScript_ECMAScript_ES6-ES11新特性工作笔记037
  3. k8s核心技术-Controller(Deployment)_概述和应用场景---K8S_Google工作笔记0028
  4. Linux工作笔记025---CentOS7.3安装Nginx
  5. IOS学习笔记03---C语言概述
  6. 小技巧之nvidia-smi
  7. 嵌入式电路设计(从电路到系统)
  8. 无人驾驶(在apollo中添加新车辆)
  9. 随想录(关于signal的实验)
  10. mysql查询单表的销售额_MYsql数据库单表百万数据量查询