ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

jperf Linux 实战:iperf 图形化前端部署与网络吞吐测试指南

jperf Linux 实战:iperf 图形化前端部署与网络吞吐测试指南 简介jperf-1.0.0.zip 是一份面向 Linux 运维与网络性能测试人员的 Java 工具包对应 jperf 1.0.0 版本用于评估和优化 TCP/UDP 网络性能可测量带宽、延迟、丢包率等关键指标适合网络运维、服务器调优及数据中心性能验证等场景。压缩包共 49 个文件约 70KB以 20 个 java 源码与 14 个 class 字节码为主体辅以 5 个 xml 配置、3 个 txt 说明、3 个 iml 与 1 个 ipr/iws 工程文件、1 个 jar 包及 properties 属性文件构成完整的可编译工程结构。已有 106 人学习下载。借助源码与工程配置读者可了解 jperf 的模块划分与构建方式掌握 TCP_RR、TCP_CBR、UDP_RR 等测试模式的参数配置思路并参考 README 与示例快速上手为网络性能测试与排错提供可复用的工具基础。1. jperf 在 Linux 上到底解决什么问题先别急着敲命令很多人第一次看到jperf-1.0.0.zip_jperf linux这个组合会以为 jperf 是一个独立的压测工具其实它本质上是 iperf 的图形化前端。iperf 负责在两端之间打流、测吞吐jperf 负责把那些-c、-s、-u、-b、-w参数变成可点选的界面再把结果画成实时曲线。它解决的核心问题不是“测不测得出带宽”而是“怎么让一次带宽验证过程可复现、可截图、可对比”。在 Linux 服务器上jperf 通常以 Java 程序形式运行依赖 JRE通过 SSH 或本地图形环境启动然后调用同机或远端的 iperf 二进制。适合谁做 IDC 网络验收、虚拟机迁移前评估、嵌入式 Linux 板卡网口吞吐确认、以及需要给非网络同事展示“这条链路到底跑多少兆”的运维。它不替代 iperf只是把 iperf 的交互成本降下来。如果你只会在 Linux 命令行里敲iperf -c那 jperf 带来的最大价值是参数模板和图形化记录如果你连 iperf 都没跑通先补 iperf再上 jperf否则图形界面只会把错误藏得更深。2. 把 jperf 跑起来Java 环境、包结构和启动命令2.1 先确认 Linux 上有没有可用的 Java 运行时jperf 1.0.0 这类老版本通常编译在 Java 6/7 时代直接上 OpenJDK 17 可能遇到UnsupportedClassVersionError或 Swing 渲染异常。我一般先看系统里有哪些 JDK# 查看已安装的 Java 版本jperf 对高版本 JDK 兼容性一般 java -version 21 # 列出系统里所有 java 可执行文件路径方便切换 update-alternatives --list java 2/dev/null || ls /usr/lib/jvm/如果只有 Java 17建议装一个 OpenJDK 8 或 11 专门给它用。以 Debian/Ubuntu 为例# 安装 OpenJDK 11 运行时不装完整 JDK 也能跑 jperf sudo apt update sudo apt install -y openjdk-11-jre # 确认安装后的路径 ls /usr/lib/jvm/java-11-openjdk-amd64/bin/java逻辑说明jperf 是 Swing 应用需要图形环境或 X11 转发。纯 SSH 终端里直接java -jar会报HeadlessException。参数说明openjdk-11-jre只提供运行时体积比 JDK 小如果你还要在机器上编译其他 Java 项目再换openjdk-11-jdk。注意不要用default-jre这种元包它可能指向 Java 17 或 21反而让 jperf 启动失败。2.2 解压 zip 后先看清目录再决定怎么启动拿到jperf-1.0.0.zip后不要直接双击。先解压并看结构# 创建独立目录避免污染当前工作区 mkdir -p ~/tools/jperf cd ~/tools/jperf # 解压 zip注意 zip 内可能带顶层目录 unzip ~/Downloads/jperf-1.0.0.zip # 查看解压后的文件列表和可执行脚本 find . -maxdepth 2 -type f | sort常见结构是jperf-1.0.0/jperf.sh、jperf-1.0.0/jperf.jar、jperf-1.0.0/lib/。启动脚本里通常写死了java -jar jperf.jar。如果脚本没有执行权限# 给启动脚本加执行权限 chmod x jperf-1.0.0/jperf.sh # 用指定 Java 11 启动避免默认 java 版本不对 JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64 ./jperf-1.0.0/jperf.sh逻辑说明JAVA_HOME临时覆盖只对当前命令生效不影响系统默认 Java。参数说明如果脚本里用的是java而不是$JAVA_HOME/bin/java可以手动改脚本或者用PATH前置# 把 Java 11 的 bin 放到 PATH 最前面再启动 export PATH/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH ./jperf-1.0.0/jperf.sh注意如果 SSH 会话没有 X11需要ssh -X或ssh -Y并且服务端sshd_config里X11Forwarding yes。否则你会看到Cant connect to X11 window server这不是 jperf 的错是显示通道没通。2.3 服务端和客户端到底谁开 jperfjperf 图形界面通常只在一端开另一端跑 iperf 命令行即可。典型拓扑角色机器运行内容说明服务端Linux Aiperf -s或 jperf 服务模式监听 5001 端口客户端Linux Bjperf 图形界面填 A 的 IP发起测试控制端你的笔记本SSH -X 到 B显示 jperf 窗口如果 A 上没有 iperf先装# Debian/Ubuntu 安装 iperf2jperf 1.0.0 主要适配 iperf2 sudo apt install -y iperf # 启动服务端监听默认 5001 端口 iperf -s逻辑说明jperf 1.0.0 默认调用iperf命令不是iperf3。如果你系统里只有iperf3jperf 会报找不到命令或参数不兼容。参数说明iperf -s默认 TCP 5001加-u是 UDP 服务端。注意有些发行版iperf包已经指向 iperf3装完用iperf -v确认版本输出里带iperf version 2.x才对。3. jperf 参数怎么填TCP/UDP、窗口、并发和时长3.1 TCP 吞吐测试先跑一条干净的单流在 jperf 界面里客户端模式填服务端 IP端口 5001协议选 TCP时间 10 秒并发流 1。对应命令行等价于# 客户端单流 TCP 测试持续 10 秒每秒输出一次 iperf -c 192.168.1.10 -p 5001 -t 10 -i 1逻辑说明-c是客户端模式-t是总时长-i是报告间隔。参数说明-w是 TCP 窗口Linux 默认自动调优但跨广域网或高延迟链路时手动指定更稳# 指定 256KB 窗口适合 RTT 20ms 左右的链路 iperf -c 192.168.1.10 -p 5001 -t 10 -w 256K注意窗口不是越大越好。如果中间设备缓冲区小大窗口反而导致丢包和重传吞吐下降。我一般从默认开始再按带宽 × RTT估算取 2 倍左右试。3.2 UDP 测试看丢包和抖动别只看带宽UDP 模式必须指定带宽-b否则 iperf2 默认 1Mbps测出来毫无意义。jperf 界面上有带宽输入框填100M表示 100Mbps。# UDP 测试目标带宽 100Mbps包长 1470 字节 iperf -c 192.168.1.10 -p 5001 -u -b 100M -l 1470 -t 10 -i 1逻辑说明-u切 UDP-b是发送速率-l是 payload 长度。参数说明1470 是常见值加上 8 字节 UDP 头和 20 字节 IP 头正好 1498避免分片。如果链路 MTU 是 1500用 1470 比较安全。注意UDP 测试结果里Jitter和Lost/Total比Bandwidth更重要。丢包超过 1% 就要查链路不是调 jperf。3.3 并发流和双向测试模拟真实业务压力单流跑满千兆的情况很少多流才能压出交换机和网卡队列的真实表现。jperf 里可以设并行流数量命令行是-P# 8 条并行 TCP 流持续 20 秒适合测试多队列网卡 iperf -c 192.168.1.10 -p 5001 -P 8 -t 20 -i 2逻辑说明-P 8会开 8 个 socket 同时打流能更好利用多核和网卡多队列。参数说明-i 2每 2 秒汇总一次。双向测试用-d或-r# 双向同时测试服务端也向客户端发流 iperf -c 192.168.1.10 -p 5001 -d -t 10注意双向测试对 CPU 占用翻倍如果机器本身负载高结果会偏低。测之前用top看一眼si和hi软中断高说明网络栈已经在忙。4. 避坑与排查jperf 在 Linux 上最容易翻车的 5 个点4.1 启动报 HeadlessException 或 No X11 DISPLAY现象终端里执行jperf.sh立刻抛java.awt.HeadlessException或Cant connect to X11 window server。原因当前会话没有图形显示Java 进入 headless 模式Swing 无法初始化。解决用ssh -X userhost重新登录确认echo $DISPLAY有值比如localhost:10.0。如果服务端没开 X11Forwarding改/etc/ssh/sshd_config后重启 sshd。实在没有图形环境就放弃 jperf 界面直接用 iperf 命令行别在这上面耗。4.2 jperf 找不到 iperf 命令现象界面点开始后提示iperf: command not found或Cannot run program iperf。原因jperf 调用的是系统 PATH 里的iperf但你的 PATH 里只有iperf3或者 iperf 装在/usr/local/bin而 jperf 继承的 PATH 不含它。解决先which iperf确认存在如果只有 iperf3装 iperf2 包或者做软链接# 确认 iperf3 路径 which iperf3 # 不建议直接链 iperf3 到 iperf参数不兼容优先装 iperf2 sudo apt install -y iperf注意iperf2 和 iperf3 参数差异大-d、-r在 iperf3 里行为不同别混用。4.3 测出来只有几十 Mbps但网卡显示千兆现象ethtool eth0显示 1000Mb/sjperf 单流 TCP 只有 80Mbps。原因常见有三种——TCP 窗口太小、路径 RTT 高、或者中间有百兆设备。解决先加-w 256K再测如果没变化用ping看 RTT用mtr看路径再检查交换机端口协商速率。还有一种玄学情况虚拟机 virtio 网卡没开多队列单流被一个 vCPU 限制加-P 4立刻上去。4.4 UDP 测试显示 0 丢包但带宽远低于设定值现象-b 100M设了 100Mbps结果报告里 Bandwidth 只有 20Mbps丢包 0。原因发送端 CPU 或网卡跑不到 100Mbps 的 UDP 小包速率iperf 实际发不出去那么多。解决加大-l包长到 1470 或 8000如果支持 jumbo frame减少包数量或者换多流-P 4。注意UDP 测试里-b是目标值不是保证值发不出去时 iperf 不会报错只会显示实际值。4.5 服务端端口被占用或防火墙拦截现象客户端一直connect failed: Connection refused。原因服务端 iperf 没启动或者 5001 被其他进程占用或者 firewalld/iptables 没放行。解决# 查看 5001 是否被监听 ss -lntup | grep 5001 # 临时放行 firewalld sudo firewall-cmd --add-port5001/tcp sudo firewall-cmd --add-port5001/udp注意有些云主机安全组也要放行别只改本机防火墙。测完记得关掉临时规则不然就是给自己留后门。5. 把 jperf 结果变成可对比数据截图之外的三个习惯jperf 的曲线图好看但真正有用的是可对比的数字。我一般会做三件事第一每次测试前记录uname -a、ethtool速率、iperf -v版本贴在结果旁边第二TCP 和 UDP 各跑三轮取中间值避免冷启动缓存影响第三把 jperf 界面里的Report导出成文本和命令行iperf -c ... -y C的 CSV 输出对一遍。-y C是 iperf2 的 CSV 模式适合脚本采集# CSV 输出方便导入表格对比多次测试 iperf -c 192.168.1.10 -p 5001 -t 10 -y C /tmp/iperf_tcp.csv逻辑说明-y C让 iperf 用逗号分隔输出字段包括时间戳、源地址、目标地址、协议、带宽等。参数说明追加到同一个文件跑多次后可以用column -s, -t对齐查看。注意CSV 模式不会画曲线但它是做趋势对比的唯一可靠来源。进阶一点如果你要验证的是嵌入式 Linux 板卡jperf 图形界面可能跑不动但 iperf 命令行一定在。我的习惯是先在板卡上跑iperf -s在 PC 上用 jperf 连过去这样板卡只负责收发包不承担 Java 开销。测完把 PC 上的 CSV 和 jperf 截图一起归档下次换固件或换交换机直接对比同一组参数。这个习惯帮我省过很多次“上次明明能跑满这次怎么只有一半”的扯皮。希望帮到你。本文还有配套的精品资源点击获取
返回列表