宝塔面板服务器流量饱和时可通过四种方法自动降级:一、解析/proc/net/dev实时监控并停非核心服务;二、调用宝塔API动态关停高流量站点;三、用tc+iptables实施端口限速;四、集成Prometheus告警触发Webhook执行降级。

当宝塔面板托管的服务器网络流量达到饱和状态时,可能引发响应延迟、服务不可用等问题。为保障核心服务持续可用,可通过脚本实时监控流量并触发自动降级策略。以下是实现该目标的多种可行方法:
一、基于/proc/net/dev的实时流量检测+服务停启脚本
该方法通过解析系统网络接口统计文件获取当前入/出流量速率,当连续多次采样超过阈值时,自动停止非核心服务(如PHP-FPM、Redis、或特定站点)。
1、创建监控脚本 /www/server/monitor/traffic_degrade.sh,并赋予执行权限:
chmod +x /www/server/monitor/traffic_degrade.sh
2、在脚本中定义网卡名(如eth0)、流量阈值(单位:KB/s)、采样间隔(秒)及待降级服务名(如 php-fpm):
3、使用awk读取/proc/net/dev中对应网卡的RX和TX字节数,计算每秒增量,取两者最大值作为当前流量速率。
4、若连续3次检测值均 ≥ 阈值,则执行 systemctl stop php74-fpm(以PHP 7.4为例)或 bt stop php(调用宝塔命令停用指定PHP版本)。
5、添加定时任务,每30秒运行一次:
*/30 * * * * /bin/bash /www/server/monitor/traffic_degrade.sh > /dev/null 2>&1
二、利用宝塔API配合自定义Shell脚本实现站点级降级
该方法不中断系统服务,而是通过宝塔开放的API动态关闭高带宽消耗站点,保留基础Web服务与管理后台可用。
1、在宝塔面板【安全】→【API接口】中启用API,并记录Key与端口(默认8888)。
2、编写脚本调用宝塔API查询所有站点状态与绑定域名,再结合netstat或ss命令统计各站点关联进程的连接数与流量估算值。
3、识别出近5分钟平均出口流量最高的前2个站点,构造JSON请求体,调用 /site/stop 接口关停对应站点ID。
4、关停后向宝塔日志目录写入记录:
echo "$(date): 自动降级站点 [站点名],瞬时出口流量 128.4 MB/s" >> /www/wwwlogs/autodegrade.log
5、将脚本加入crontab,每2分钟执行一次,避免频繁抖动。
三、使用tc+iptables构建流量整形+自动限速脚本
该方法不关闭服务,而是对指定端口或IP实施实时限速,使高负载下仍维持基本响应能力,属于软性降级。
1、确认内核已加载sch_fq_codel模块:
modprobe sch_fq_codel
2、创建限速规则:对80/443端口出方向限制为5MB/s,使用tc命令配置HTB队列并绑定iptables标记:
3、编写判断脚本,使用iftop -P -t -L 1 输出前10行,提取“Total send rate”数值,若 ≥ 8388608 字节/秒(即8MB/s),则激活限速规则。
4、限速激活后,通过iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1 标记流量包。
5、使用 tc class add dev eth0 parent 1: classid 1:1 htb rate 5mbit 实施带宽控制。
四、集成Prometheus+Alertmanager+Webhook触发宝塔操作
该方法适用于已有监控体系的生产环境,通过指标告警驱动降级动作,具备高可靠性和可追溯性。
1、部署node_exporter采集node_network_receive_bytes_total与node_network_transmit_bytes_total指标。
2、在Prometheus中配置Recording Rule,计算5分钟平均出口带宽:rate(node_network_transmit_bytes_total{device=~"eth.*"}[5m]) * 8
3、设置Alert规则,当该值持续2分钟 > 62914560(即60Mbps)时,触发Alertmanager Webhook。
4、Webhook接收端为轻量Python服务,收到告警后调用宝塔本地命令 bt stop sites 或执行curl -X POST "http://127.0.0.1:8888/site/stop" -H "Content-Type: application/json" -d '{"siteName":"demo.com"}' -d "key=xxx"
5、降级动作执行完毕后,向企业微信机器人推送通知,包含触发时间、当前带宽值及受影响站点。










