Linux系统限流实践教程_保护核心服务稳定

7次阅读

Linux 限流靠精准资源控制而非堆机器:用 cgroups 限 CPU/ 内存、tc 限网络带宽、iptables+hashlimit 防连接滥用、ulimit 控进程数,核心是划清边界保障关键服务。

Linux 系统限流实践教程_保护核心服务稳定

Linux 系统限流不是靠加机器,而是靠精准控制资源使用——关键在于不让某个服务或用户吃光 CPU、内存、网络带宽或连接数,从而保住核心服务不被拖垮。

用 cgroups 限制进程资源(CPU/ 内存)

cgroups 是内核级的资源隔离机制,适合长期运行的服务(如数据库、Java 应用)。v2 版本更简洁,推荐启用:

  • 确认系统使用 cgroup v2:mount | grep cgroup,看到 cgroup2 即表示已启用
  • 创建限流目录:sudo mkdir -p /sys/fs/cgroup/db-limited
  • 限制 CPU 使用率不超过 50%:echo “50000” > /sys/fs/cgroup/db-limited/cpu.max(单位为万分之一,50000=50%)
  • 限制内存上限为 2G:echo “2147483648” > /sys/fs/cgroup/db-limited/memory.max
  • 将目标进程加入该组:echo PID > /sys/fs/cgroup/db-limited/cgroup.procs

建议配合 systemd 服务定义使用(如MemoryMax=2GCPUQuota=50%),重启服务后自动生效,更可靠。

用 tc 做网络出口限速(防带宽打满)

当某服务突发大量外发流量(如日志推送、文件下载接口),可用 tc 在网卡层面限速,保护其他服务的网络响应。

  • 清空原有规则:tc qdisc del dev eth0 root 2>/dev/null
  • 添加 HTB 队列,总出口限 100Mbps:tc qdisc add dev eth0 root handle 1: htb default 30
  • 为特定 端口(如 9001)单独限速 5Mbps:tc class add dev eth0 parent 1: classid 1:1 htb rate 5mbit
  • 匹配并分流流量:tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dport 9001 0xffff flowid 1:1

注意:tc规则不持久,建议写入 /etc/network/if-up.d/ 脚本或用 systemd-networkd 服务固化。

用 iptables+hashlimit 防连接滥用(抗简单 CC)

对 HTTP API 或 SSH 等入口服务,限制单 IP 连接频次,可快速缓解低强度扫描和暴力尝试。

  • 每秒最多新建 3 个 TCP 连接(针对 80/443 端口):iptables -A INPUT -p tcp –dport 80 -m hashlimit –hashlimit-above 3/sec –hashlimit-burst 5 –hashlimit-mode srcip –hashlimit-name http_limit -j DROP
  • 同时记录触发行为便于排查:iptables -A INPUT -p tcp –dport 80 -m hashlimit –hashlimit-above 3/sec –hashlimit-mode srcip -j LOG –log-prefix “RATE_LIMIT_DROP: “
  • 保存规则(Debian/Ubuntu):iptables-save > /etc/iptables/rules.v4

注意:hashlimit按源 IP 哈希计数,轻量高效;但不能替代 WAF,仅作为第一道防线。

用 ulimit 控制用户级进程数量(防 fork 炸弹)

普通用户误执行 :(){ :|:&};: 这类 fork 炸弹会迅速耗尽 PID 数,导致系统无法创建新进程。需提前设防:

  • 临时限制当前会话:ulimit -u 512(最大用户进程数)
  • 永久生效:在 /etc/security/limits.conf 中添加:
    * soft nproc 512
    * hard nproc 1024
  • 对关键用户(如 www-data)单独收紧:www-data soft nproc 200

搭配 pam_limits.so 启用(默认已启用),登录后自动加载,无需重启服务。

限流不是压性能,而是划边界——让非核心任务有约束,核心路径有余量。配置后务必用 stress-ngab 或真实流量验证效果,避免过度限制反伤可用性。

星耀云
版权声明:本站原创文章,由 星耀云 2026-01-04发表,共计1757字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources