零基础学习性能测试第二章-linux服务器监控:网络iftop
目录
- 学习内容与快速应用路径
- 第一阶段:基础认知与安装 (0.5天)
- 第二阶段:基本使用与关键指标解读 (1天)
- 第三阶段:交互式操作与过滤 (核心技能 - 1天)
- 第四阶段:识别网络瓶颈与快速应用 (工作中实践)
- 速查清单 (快速应用)
零基础学习使用 iftop
监控 Linux 网络流量并快速应用到性能测试工作中,关键在于 理解核心概念、掌握交互操作、解读关键指标、关联性能问题。iftop
是一款强大的实时网络带宽监控工具,能直观显示主机间、端口间的流量排行,是定位网络瓶颈和异常流量的利器。
核心目标:
- 理解
iftop
的核心功能: 实时显示网络接口的带宽使用情况、连接对(主机对)、端口流量排行。 - 熟练安装和启动
iftop
: 掌握基本命令参数。 - 掌握交互式操作: 学会排序、筛选、切换显示模式。
- 解读关键指标: 理解发送速率、接收速率、峰值速率、累计流量的含义。
- 定位高流量连接/主机: 快速找出消耗带宽的“元凶”。
- 整合到性能测试流程: 在压测过程中实时监控网络流量,分析其与性能表现的关系。
学习内容与快速应用路径
第一阶段:基础认知与安装 (0.5天)
-
iftop
是什么?- 一个基于终端的实时网络带宽监控工具。
- 核心功能:
- 实时显示指定网络接口的带宽使用情况。
- 按主机对(连接对)或端口排序显示流量(默认按目标主机排序)。
- 显示发送 (TX)、接收 (RX) 速率以及峰值 (Peak) 速率。
- 显示累计 (Cum) 发送和接收的数据量。
- 支持基于 IP 地址、端口号、网段进行过滤。
- 优势: 直观、实时、能快速定位流量最大的连接/主机。
- 劣势: 不记录历史数据(需配合
sar
或监控系统),不直接显示进程信息(需配合nethogs
或ss
/netstat
)。
-
安装
iftop
:- Ubuntu/Debian:
sudo apt update sudo apt install iftop
- CentOS/RHEL (需要 EPEL 仓库):
sudo yum install epel-release # 如果未启用 EPEL sudo yum install iftop
- 确认安装成功:
iftop -h
应显示帮助信息。
- Ubuntu/Debian:
-
理解监控对象:网络接口
- 运行
ip link show
或ifconfig
(较老系统) 查看服务器上的网络接口。 - 常见接口名:
eth0
/ens192
: 物理以太网接口 (最常见)lo
: 本地环回接口tun0
/tap0
: VPN 隧道接口docker0
/br-xxxxxx
: Docker 网桥接口
- 快速应用: 确定你要监控哪个接口。通常是连接外部网络或承载被测业务流量的接口(如
eth0
)。
- 运行
第二阶段:基本使用与关键指标解读 (1天)
-
启动
iftop
:- 基本命令:
sudo iftop
(默认监控第一个非lo
接口,通常是eth0
,需要 root 权限) - 指定接口:
sudo iftop -i eth0
(监控eth0
接口) - 指定端口:
sudo iftop -P
(显示端口号,强烈推荐!) - 常用组合:
sudo iftop -nNP -i eth0
-n
: 不解析主机名(显示 IP,速度更快,避免 DNS 问题干扰)-N
: 不解析端口号(显示端口数字,而不是服务名如http
,更准确)-P
: 显示端口号! (非常重要,能看到具体哪个端口流量大)-i eth0
: 指定接口
- 基本命令:
-
iftop
界面解读 (运行sudo iftop -nNP -i eth0
后):
界面主要分为三部分:-
顶部 (Header):
- Interface: 监控的接口名 (e.g.,
eth0
). - IP: 本机在该接口上的 IP 地址。
- => / <=: 箭头指示方向:
=>
(向右箭头):表示 发送 (TX / Outgoing) 流量 (从本机 到 远程主机)。<=
(向左箭头):表示 接收 (RX / Incoming) 流量 (从远程主机 到 本机)。
- 中间刻度条 (TX/RX Bar): 直观显示当前总发送/接收带宽占用的相对比例。
- Rate (速率): 最重要!
2s
: 过去 2 秒的平均速率。10s
: 过去 10 秒的平均速率。40s
: 过去 40 秒的平均速率。
- Cumulative (累计):
cume
: 本次运行iftop
以来累计接收的总数据量。peak
: 本次运行iftop
以来观察到的峰值速率。
- Rates (具体数值):
TX
: 当前发送速率 (e.g.,1.02Mb
表示 1.02 Mbps)。RX
: 当前接收速率。TOTAL
: 发送 + 接收的总速率。
- Interface: 监控的接口名 (e.g.,
-
中部 (主体 - Connection Pairs):
- 每一行代表一个 主机对 (连接对) 或 单个主机 + 端口 (如果使用了
-P
且流量足够大)。 - 格式 (有
-P
时常见):Remote Host:Port => Local Host:Port OR Local Host:Port <= Remote Host:Port [TX Rate] [RX Rate] [TOTAL Rate] [TX Rate] [RX Rate] [TOTAL Rate]
- 关键列:
- 第一列 (最左侧): 远程主机 (Remote Host) 或其 IP:Port。
- 中间列 (=> 或 <= 两侧): 本地主机 (Local Host) 或其 IP:Port。箭头方向指示流量相对于本机的方向。
- 右侧三列 (条形图旁): 该连接对在指定时间尺度 (
2s
,10s
,40s
) 上的 发送 (TX) 速率、接收 (RX) 速率、总 (TOTAL) 速率。条形图长度直观表示该速率占总带宽的比例。
- 排序: 默认按 目标主机 (箭头指向的一方) 的 总流量 (TOTAL) 降序排列。这是理解谁在消耗带宽的关键视图。
- 每一行代表一个 主机对 (连接对) 或 单个主机 + 端口 (如果使用了
-
底部 (Footer):
- 显示当前排序依据 (e.g.,
Order: destination
),使用的过滤器 (e.g.,Filter: [none]
) 等信息。 - 显示
iftop
版本。 - 显示帮助提示:按
h
显示交互式帮助菜单 (非常重要!)
- 显示当前排序依据 (e.g.,
-
-
关键指标总结:
TX
/=>
: 发送 (流出) 速率/流量。服务器主动向外发送数据(如响应请求、上传文件、访问数据库)。RX
/<=
: 接收 (流入) 速率/流量。服务器接收外部数据(如客户端请求、下载文件、数据库返回结果)。TOTAL
:TX + RX
的总速率/流量。反映该连接对消耗的总带宽。Rate (2s/10s/40s)
: 不同时间窗口的平均速率。2s
最敏感反映瞬时变化,40s
反映较稳定的趋势。Peak
: 本次运行中观测到的最高速率(通常指TOTAL
)。Cum
: 本次运行中累计传输的总数据量。- 条形图长度: 直观比较! 条形越长,该连接对在对应方向(TX/RX/TOTAL)上消耗的带宽比例越大。
第三阶段:交互式操作与过滤 (核心技能 - 1天)
iftop
的强大之处在于其交互式操作。在运行界面按 h
键查看完整帮助。
-
常用交互式按键:
h
/?
: 显示帮助菜单。必记! 忘记时随时按h
。P
: 切换显示/隐藏端口 (Port)。 这是最常用的键之一!默认可能不显示端口,按P
确保显示IP:Port
,这对定位具体服务(如哪个 Web 请求、哪个数据库连接)至关重要。T
: 切换显示模式。 在多种视图间循环切换:- 单行 (单主机): 只显示主机 IP,不区分端口(即使开了
-P
)。 - 两行 (主机+端口): 最常用! 第一行显示主机 IP,第二行显示端口号。清晰区分不同连接。
- 单行 (主机:端口): 合并显示
IP:Port
。
- 单行 (单主机): 只显示主机 IP,不区分端口(即使开了
s
/d
: 切换是否显示源 (Source) / 目标 (Destination) 主机。 按s
隐藏源列(左侧),按d
隐藏目标列(右侧)。再按一次恢复显示。用于聚焦一方。t
: 切换速率条形图的显示模式。 在三种模式间循环:- 单行 (Two-line): 发送 (
=>
) 和接收 (<=
) 流量分别显示在两行。 - 单行 (One-line): 发送和接收流量合并显示在一行(条形图叠加)。
- 无条形图 (Off): 只显示数字,不显示条形图。
- 单行 (Two-line): 发送 (
j
/k
/↑
/↓
: 上下移动光标,高亮选择某一行连接对。>
/<
: 基于当前高亮列排序。>
按当前高亮列降序,<
按当前高亮列升序。高亮哪列由l
切换。l
: 切换高亮列。 在TX Rate
->RX Rate
->TOTAL Rate
之间循环。高亮后可用>
/<
按该列排序。o
: 冻结当前排序。 按o
后,新连接出现但不会改变现有行的顺序。再按o
恢复动态排序。p
: 切换是否显示端口监听状态。 显示哪些端口是服务器监听的(会有*
标记)。有助于识别服务端口。1/2/3
: 快速切换速率时间尺度。1
对应2s
,2
对应10s
,3
对应40s
。界面顶部Rate
标签会高亮当前选中的尺度。L
: 切换流量刻度 (Log Scale)。 对于流量差异巨大的情况,使用对数刻度能让小流量连接也可见。再按切回线性刻度。!
: 执行 Shell 命令。 输入命令后回车执行,按Ctrl+C
取消。q
: 退出iftop
。
-
过滤流量 (精准定位):
- 启动时过滤: 使用
-f
参数指定过滤表达式 (pcap filter)。- 只监控特定主机:
sudo iftop -f 'host 192.168.1.100' -nNP -i eth0
(只看与192.168.1.100
的流量) - 只监控特定网段:
sudo iftop -f 'net 10.0.0.0/24' -nNP -i eth0
(只看10.0.0.0/24
网段流量) - 只监控特定端口:
sudo iftop -f 'port 80' -nNP -i eth0
(只看端口 80 的流量) - 组合过滤:
sudo iftop -f 'host 192.168.1.100 and (port 80 or port 443)' -nNP -i eth0
(只看该主机 80/443 端口流量)
- 只监控特定主机:
- 运行时过滤: 在
iftop
运行界面按f
键,会提示Enter filter expression:
,输入 pcap 过滤表达式后回车生效。按Ctrl+C
取消输入或清除过滤。- 常用过滤符:
host
,net
,port
,portrange
,src
,dst
,and
,or
,not
(!
)。语法与tcpdump
相同。
- 常用过滤符:
- 启动时过滤: 使用
第四阶段:识别网络瓶颈与快速应用 (工作中实践)
-
常见性能测试网络瓶颈现象与
iftop
分析:- 带宽跑满:
- 现象: 性能测试时响应变慢,TPS 上不去或下降。
iftop
顶部TX
或RX
或TOTAL
速率持续接近或达到物理网卡带宽上限 (e.g., 千兆网卡 ~940Mbps)。 - 分析:
iftop
顶部TOTAL Rate
接近带宽上限。观察是哪个方向(TX/RX)占主导,哪些连接对 (IP:Port
) 贡献了主要流量(通常排在前几行)。 - 关联: 带宽跑满的时间点与 TPS 下降/RT 上升的时间点吻合。
- 现象: 性能测试时响应变慢,TPS 上不去或下降。
- 特定连接流量异常高:
- 现象: 服务器整体负载不高,但某些请求慢。
iftop
可能显示某个特定IP:Port
对 (如数据库连接、外部 API 调用) 的TOTAL
速率或RX
速率异常突出。 - 分析: 利用排序 (
l
+>
/<
) 和过滤 (f
) 聚焦可疑连接。结合端口号 (P
) 判断服务类型 (e.g.,3306
是 MySQL,6379
是 Redis)。高RX
可能表示该连接在接收大量数据(如数据库返回大结果集),高TX
可能表示在发送大量请求或数据。 - 关联: 该连接流量激增时,涉及该服务的操作响应时间 (
RT
) 变长。
- 现象: 服务器整体负载不高,但某些请求慢。
- 大量小连接/高并发:
- 现象:
iftop
显示非常多的连接对,虽然单条流量不大,但连接数极多(列表很长,需要滚动查看)。顶部TOTAL Rate
可能不高,但Peak
可能很高或有波动。 - 分析: 这可能不是带宽瓶颈,而是连接数瓶颈或服务器处理能力瓶颈(如应用服务器线程池满、数据库连接池满)。
iftop
帮助确认了连接数规模。 - 关联: 高并发压测时出现连接超时、拒绝连接等错误,同时
iftop
显示海量连接。
- 现象:
- 非预期流量 (安全/异常):
- 现象: 服务器负载异常或带宽被不明占用。
iftop
显示大量与业务无关的IP:Port
流量(如可疑的外国 IP、非标准端口)。 - 分析: 利用
iftop
快速发现可疑流量源和目标。结合端口判断(如22
SSH 爆破,1433
/3306
数据库爆破)。 - 关联: 此流量消耗资源,影响正常业务性能。
- 现象: 服务器负载异常或带宽被不明占用。
- 带宽跑满:
-
快速应用到性能测试工作流程:
-
测试前准备:
- 安装
iftop
。 - 确定待监控的网络接口 (
ip link show
/ifconfig
)。 - 记录网卡带宽: 知道理论最大值 (e.g.,
eth0
是 1000Mbps)。 - (可选) 准备常用命令备忘单(特别是交互键)。
- 安装
-
压测中实时监控:
- 启动命令:
sudo iftop -nNP -i eth0
(替换为你的接口) - 关键操作:
- 确保按了
P
显示端口号! - 确保视图是
T
(两行模式 - 主机和端口分开)。 - 观察 顶部 的
TX
,RX
,TOTAL Rate
是否接近带宽上限? - 观察 主体列表:
- 哪些
IP:Port
对排在最前面 (消耗最多TOTAL
带宽)? - 流量主要是 发送 (
=>
) 还是 接收 (<=
)?这指示了数据流方向(服务器在拉数据还是推数据)。 - 是否有非预期的高流量连接?(如非业务 IP、非业务端口)
- 哪些
- 使用
1
/2
/3
切换时间尺度,看不同时间窗口的趋势。 - 对可疑连接:
- 按
j
/k
高亮它。 - 按
l
高亮TOTAL
列 (或其他列)。 - 按
>
按高亮列降序排序,确认其位置。 - (可选) 按
f
过滤只显示该 IP 或端口,进一步观察。
- 按
- 确保按了
- 核心关注:
- 带宽瓶颈信号: 顶部
TOTAL Rate
持续 > 80% 带宽上限。 - 高流量连接: 列表中持续排在前列的
IP:Port
对,其TOTAL
速率显著高于其他连接。 - 流量方向: 是服务器发出去的 (
TX
/=>
) 多,还是收进来的 (RX
/<=
) 多?这对理解瓶颈点(出口带宽 vs 入口带宽,服务器是否在大量读/写外部资源)很重要。 - 关联性能: 当上述现象出现时,立即记录时间戳,并检查此时性能测试工具的 TPS、RT、错误率 是否出现恶化?建立时间关联性!
- 带宽瓶颈信号: 顶部
- 启动命令:
-
测试后分析与报告:
- 定性描述:
- 压测期间网络带宽峰值 (
TOTAL Rate
max) 是多少?占理论带宽的百分比? - 主要流量方向 (TX-heavy / RX-heavy / Balanced)?
- 消耗带宽 Top N 的连接对是哪些 (
IP:Port
)? 根据端口推断其服务类型 (e.g.,192.168.10.20:5432 => 10.0.0.5:55000
可能是 AppServer 连接 DB)。 - 是否观察到非预期流量?
- 压测期间网络带宽峰值 (
- 关联分析:
- 当带宽接近饱和 (
TOTAL Rate
> X%) 时,TPS 是否无法提升?RT 是否显著上升?错误率(如超时)是否增加? - 当特定连接 (如 DB 连接) 流量异常高时,依赖该连接的操作 RT 是否变长?
- 当带宽接近饱和 (
- 报告要点:
- 网络带宽使用情况: 峰值速率、是否触及瓶颈。
- 主要流量贡献者: 列出 Top 3-5 流量连接对 (
源IP:Port -> 目标IP:Port
) 及其大致速率和方向。 - 发现的问题:
- “压测高峰时,出口带宽 (
TX
) 持续达到 920Mbps (占千兆带宽 92%),与 TPS 停滞在 1500 的时间点吻合,判断为出口带宽瓶颈。主要流量源为 Web 服务器向用户推送大量图片资源 (80/TCP
,443/TCP
)” - “发现与数据库
10.1.2.3:3306
的连接在RX
(接收) 方向流量峰值达 50Mbps,远高于其他连接。同时段涉及复杂查询的 API 平均 RT 从 100ms 升至 800ms,怀疑数据库返回数据量过大或查询效率低。” - “监控到大量来自
202.96.xx.xx
到22/TCP
端口的连接尝试 (SSH),消耗少量带宽但占用连接数,建议加强安全策略。”
- “压测高峰时,出口带宽 (
- 建议:
- 带宽瓶颈:升级网络带宽、优化应用减少数据传输(压缩、分页、缓存)、CDN 加速静态资源、负载均衡分散流量。
- 特定连接高流量:优化对应服务(如数据库查询、API 响应)、检查调用是否合理、增加缓存。
- 非预期流量:安全加固(防火墙、Fail2ban)、关闭无用端口。
- 定性描述:
-
速查清单 (快速应用)
- 安装:
sudo apt/yum install iftop
- 启动 (推荐):
sudo iftop -nNP -i eth0
(替换接口) - 必按交互键:
P
- 显示端口 (Show Ports)T
- 切换到 两行显示模式 (显示主机+端口)1
/2
/3
- 切换速率时间尺度 (2s/10s/40s)l
+>
- 按TOTAL
列降序排序 (找出流量最大者)f
- 过滤流量 (e.g.,host x.x.x.x
,port y
)h
- 显示帮助 (随时救命)q
- 退出
- 关键看什么:
- 顶部:
TX
,RX
,TOTAL
Rate (接近带宽上限?) - 列表前几行: 哪些
IP:Port
流量 (TOTAL
) 最大?方向 (=>
/<=
) 是什么? - 关联性能: 当 1 或 2 出现异常时,TPS/RT/错误率是否恶化?
- 顶部:
总结: iftop
是性能测试中监控网络流量的 实时显微镜。零基础快速上手的核心是 用对命令 (-nNP
)、按对键 (P
, T
)、看对地方 (顶部带宽、列表 Top)、建立关联 (带宽/高流量 vs TPS/RT)。通过几次压测实战,你就能快速掌握 iftop
,精准定位网络层的性能瓶颈或异常,为优化提供关键洞察。祝你成功!