GIS开发 | 空间分析 | 软硬件技术
🌿 绿水青山就是金山银山 🌿

排查Linux服务器流量使用情况(记事本)

适用场景:基于 Nginx 访问日志排查站点访问 IP、URL 流量、爬虫消耗流量,结合系统工具定位实时网络占用,适配宝塔 Linux 环境。 ✅ 说明:以下所有命令均为本人实际线上验证调试得出,可直接复制使用 前置前提:Nginx 默认日志格式,$1=客户端IP、$7=请求URL、$10=$body_bytes_sent(响应体字节数);若自定义日志格式,字段序号需要对应调整。

Nginx 层面排查(日志离线分析)

1. 统计访问 IP TOP20(访问频次)

统计访问量最高的前 20 个 IP,快速识别高频访问、异常 IP、爬虫来源

awk '{print $1}' /www/wwwlogs/www.qhftdx.cn.log | sort | uniq -c | sort -nr | head -20

2. 按 URL 汇总出站流量

统计每个接口 / 页面消耗的服务器出站流量,最后输出全站总出站流量

awk '{sum [$7] += $10; total += $10} END {for (url in sum) print sprintf ("%.2f MB", sum [url]/1024/1024), url; print "==== 总出站:",sprintf ("%.2f MB",total/1024/1024)}' /www/wwwlogs/[www.qhftdx.cn](https://www.qhftdx.cn).log | sort -nr

3. 统计百度蜘蛛消耗流量

筛选百度爬虫请求,统计爬虫占用的出站流量,可用于评估 SEO 爬虫带宽开销

# 优化版(固定2位小数,同时统计请求次数)
grep -i "baiduspider" /www/wwwlogs/www.qhftdx.cn.log | awk '{sum += $10;cnt++} END{printf "百度蜘蛛请求数:%d 次,总流量:%.2f MB\n", cnt, sum/1024/1024}'

拓展爬虫关键字:Sogouspider、360Spider、ToutiaoSpider、Googlebot

操作系统层面排查(实时网络 & 连接)

适用场景:日志统计和实际带宽监控数据差异大时,实时抓网卡流量、TCP 连接 说明:eth0 为网卡名称,执行前请先确认本机真实网卡(ip a 查看)

1. nethogs 按进程实时流量监控

直观看到每个进程占用的实时网络流量,适合定位哪个程序跑满带宽

# 安装
yum install -y nethogs
# 实时监控指定网卡
nethogs eth0

注意:经常出现 unknown TCP 连接,属于正常现象,可配合 TCP 连接命令进一步溯源

2. 查看已建立 TCP 长连接

ESTABLISHED 代表 TCP 三次握手完成、双向数据通信中的有效连接,常用于排查连接堆积、恶意并发、长连接泄漏、nginx/php-fpm/mysql 连接爆满等问题。

# netstat 查看所有已建立TCP连接,展示进程PID和程序名(需要root执行)
netstat -antp | grep ESTABLISHED

字段说明:

  • tcp:协议类型
  • 接收队列、发送队列:非 0 代表有数据堆积阻塞
  • 本地地址:端口:本机监听端口
  • 外部地址:端口:客户端远端 IP 端口
  • ESTABLISHED:连接状态
  • PID/Program name:对应进程 ID 和程序名,普通用户会显示 -
# 统计当前ESTABLISHED总连接数量
netstat -ant | grep -c ESTABLISHED
# 统计每个进程的ESTABLISHED连接数,从高到低排序,快速定位连接大户
netstat -antp | grep ESTABLISHED | awk '{print $NF}' | sort | uniq -c | sort -nr
# 只统计nginx进程的已建立连接
netstat -antp | grep ESTABLISHED | grep nginx

新版 Linux(CentOS8+/Ubuntu)推荐 ss 工具,性能远高于 netstat,大并发服务器优先使用

# ss查看已建立TCP连接
ss -ant | grep ESTAB
# ss统计ESTAB连接总数
ss -ant | grep -c ESTAB
# ss统计各进程连接数
ss -antp | grep ESTAB | awk '{print $NF}' | sort | uniq -c | sort -nr

常见异常:大量 CLOSE_WAIT/TIME_WAIT 不属于 ESTABLISHED,一般是程序没正常释放连接,需要单独排查。

3. iftop 网卡实时流量监控

监控网卡进出流量,展示 IP 之间的流量交互,-P 参数显示端口号

# 安装
yum install -y iftop
# 实时监控指定网卡,展示端口
iftop -i eth0 -P

补充排查小贴士

  1. 日志字段校验:不确定字段是否匹配时,先执行 head -5 /www/wwwlogs/www.qhftdx.cn.log 预览原始日志
  2. 权限说明:netstat -antp 查看进程名需要 root 权限,普通用户 PID 会显示-
  3. 区分概念:$body_bytes_sent 只统计 HTTP 响应体,不包含 HTTP 头部,不等于完整 TCP 流量
  4. 实时 vs 离线:Nginx 日志属于离线统计(历史数据),nethogs/iftop 是实时当前流量

拓展可选命令

# 统计404请求流量
awk '$9==404 {sum[$7] += $10; cnt++} END{printf "404请求数:%d,总流量:%.2f MB\n",cnt,sum/1024/1024}' /www/wwwlogs/www.qhftdx.cn.log