在 Linux 系统中,要查看过去1小时的服务器带宽使用情况,通常需要依赖监控工具或日志记录。以下是几种常用的方法:
方法1:使用 vnstat
(需提前安装并运行)
vnstat
是一个网络流量监控工具,可以按小时、天、月统计带宽使用情况。
1. 安装 vnstat
sudo apt install vnstat # Ubuntu/Debian
sudo yum install vnstat # CentOS/RHEL
2. 启动服务并初始化数据库
sudo systemctl enable --now vnstat
sudo vnstat -u -i eth0 # 替换 `eth0` 为你的网卡名(通过 `ip a` 查看)
3. 查看过去1小时的带宽统计
vnstat -h # 显示最近24小时的每小时流量
输出示例:
eth0 / hour
Time Rx Tx Total
------------------------- -------- -------- --------
13:00 - 14:00 1.23 GB 456 MB 1.68 GB <<< 过去1小时的数据
注意:如果
vnstat
未提前运行,则无法回溯历史数据。
方法2:使用 sar
(需安装 sysstat
)
sar
可以记录网络接口的历史数据。
1. 确保 sysstat
已启用
sudo apt install sysstat # Ubuntu/Debian
sudo yum install sysstat # CentOS/RHEL
# 检查是否启用日志记录(默认每10分钟记录一次)
sudo grep ENABLED /etc/default/sysstat # Debian/Ubuntu: ENABLED="true"
2. 查看过去1小时网络流量
sar -n DEV -f /var/log/sa/sa$(date +%d) | grep -i eth0 | tail -n 60 # eth0替换为你的网卡名
关键列说明:
rxkB/s
:每秒接收的千字节数。txkB/s
:每秒发送的千字节数。
方法3:解析 /proc/net/dev
(实时采样)
如果没有历史监控工具,可以通过脚本定期采样 /proc/net/dev
:
手动采样脚本示例
#!/bin/bash
interface="eth0" # 替换为你的网卡名
logfile="/tmp/bandwidth.log"
# 第一次读取数据
rx_bytes_prev=$(cat /proc/net/dev | grep $interface | awk '{print $2}')
tx_bytes_prev=$(cat /proc/net/dev | grep $interface | awk '{print $10}')
sleep 3600 # 等待1小时
#第二次读取数据
rx_bytes_next=$(cat /proc/net/dev | grep $interface | awk '{print $2}')
tx_bytes_next=$(cat /proc/net/dev | grep $interface | awk '{print $10}')
#计算差值(字节转换为MB/GB)
rx_mb=$(( ($rx_bytes_next - $rx_bytes_prev) / (1024*1024) ))
tx_mb=$(( ($tx_bytes_next - $tx_bytes_prev) / (1024*1024) ))
echo "Past hour: RX=${rx_mb} MB, TX=${tx_mb} MB"
方法4:使用第三方工具
- iftop:实时监控带宽(需手动运行)。
- Prometheus + Node Exporter:长期监控并存储历史数据。
- Ntopng:图形化流量分析工具。
注意事项
- 依赖历史数据:
vnstat
/sar
需要提前安装和运行才能回溯。
- 网卡名称:
通过ip a
或 `ifconfig确认正确的网络接口名称(如eth0、ens18等)。 - 无监控工具时
只能从当前时间点开始采样(如方法3)。
如果需要长期监控,建议部署专业的系统监控方案(如Zabbix、Grafana等)。
内容由零声教学AI助手提供,问题来源于学员提问