跳转至

Bandwhich 网络带宽监控

为什么要学 Bandwhich

Bandwhich 是一个终端网络带宽利用率工具,用 Rust 编写。它能实时显示当前哪些进程在使用网络、连接到哪些远程地址、每个连接的带宽消耗。当网络变慢需要排查原因、监控后台程序的网络活动时,Bandwhich 比 iftopnethogs 更直观。


核心概念

概念白话解释用途
Process View进程视图按进程显示带宽使用
Connection View连接视图按连接显示详细流量
Remote Address远程地址数据流向的目标
Upload/Download上传/下载发送和接收的流量

安装配置

# macOS
brew install bandwhich

# Cargo
cargo install bandwhich

# Ubuntu
sudo apt install bandwhich

# 需要 root 权限运行
sudo bandwhich

快速上手

# 启动(需要 sudo)
sudo bandwhich

# 界面分三个面板:
# 上:按进程显示带宽
# 中:按连接显示流量
# 下:按远程地址汇总

# 快捷键:
# Tab    切换面板焦点
# j/k    上下滚动
# q      退出

常用选项

# 只监控特定接口
sudo bandwhich -i eth0

# 原始模式(不解析域名)
sudo bandwhich -n

# 只显示特定进程
sudo bandwhich -p

# DNS 解析
sudo bandwhich -d

# 输出为表格
sudo bandwhich --raw

进阶用法

排查网络问题

# 场景:网络突然变慢
# 1. 运行 bandwhich 查看哪个进程在大量传输
sudo bandwhich

# 2. 找到占用带宽最大的进程
# 3. 查看其连接的远程地址
# 4. 决定是否需要终止或限制

# 配合其他工具
# 找到进程后用 kill 或 tc 限速
kill -9 <PID>

日志记录

# 持续记录网络使用
sudo bandwhich --raw > network_log.txt &

# 定时快照
while true; do
    echo "=== $(date) ===" >> network_stats.log
    sudo bandwhich --raw >> network_stats.log 2>&1 &
    BGPID=$!
    sleep 5
    kill $BGPID 2>/dev/null
    sleep 55
done

常见问题

Q: 为什么需要 sudo?

Bandwhich 需要捕获网络数据包来识别进程连接,这需要 root 权限。

Q: 与 nethogs 相比?

  • Bandwhich:UI 更美观、显示远程地址、Rust 性能
  • nethogs:更轻量、无需安装 Rust 工具链

Q: macOS 上权限问题?

# 可能需要授予终端完全磁盘访问权限
# System Preferences → Security → Privacy → Full Disk Access

参考资源

  • GitHub:https://github.com/imsnif/bandwhich
  • 替代工具:nethogs、iftop、nload