最近折腾订阅转换服务的朋友可能会遇到一个痛点:节点多、流量大的时候,服务器 CPU 容易跑满,甚至因为内存不足导致服务崩溃。不过,好消息来了!最近社区里针对 sub2api 提交了一个 Redis 的大优化,经过实测,效果非常惊人。

🚀 性能提升显著,CPU 直接“摸鱼”

Redis performance monitor showing low CPU usage

应用优化配置后的监控截图,CPU 占用率极低

根据原作者的反馈,在应用了最新的优化代码并调整了 Redis 配置后,即便是共享型的订阅转换服务,面对大量并发请求也能轻松应对。从监控截图来看,CPU 占用率极低,完全处于“摸鱼”状态,系统负载非常健康。这意味着我们甚至可以放心地长期开放注册,不用再担心服务器扛不住了。

⚙️ 核心优化点在哪里?

这次优化的核心在于对 Redis 底层配置的精细调优。Redis 是 sub2api 的缓存中枢,配置得当直接决定了服务的吞吐量。下面给出一份经过验证的 Docker Compose 配置模板,大家可以直接拿来用,或者根据自己的服务器规格微调。

🛠️ Redis 性能优化配置实操

Redis configuration parameters detailed view

关键参数详解配置参考

以下是一份“开箱即用”的配置片段,重点关注其中的 command 部分,这里包含了绝大多数性能优化的关键参数。

redis:
  image: redis:8-alpine
  restart: unless-stopped
  ulimits:
    nofile:
      soft: 100000
      hard: 100000
  volumes:
    - ./redis_data:/data
  command: |
    sh -ec '
    set --
    if [ -n "$${REDISCLI_AUTH:-}" ]; then
      set -- --requirepass "$$REDISCLI_AUTH"
    fi
    exec redis-server \
    --dir /data \
    --save "" \
    --appendonly yes \
    --appendfsync everysec \
    --auto-aof-rewrite-percentage 100 \
    --auto-aof-rewrite-min-size 256mb \
    --maxmemory 6gb \
    --maxmemory-policy noeviction \
    --tcp-backlog 1024 \
    --timeout 0 \
    --tcp-keepalive 60 \
    --slowlog-log-slower-than 10000 \
    --slowlog-max-len 256 \
    --latency-monitor-threshold 100 \
    --loglevel warning \
    "$$@"
    '
  environment:
    - TZ=${TZ:-Asia/Shanghai}
    - REDISCLI_AUTH=${REDIS_PASSWORD:-}
  networks:
    - sub2api-network
  healthcheck:
    test:
      - CMD
      - redis-cli
      - ping
    interval: 10s
    timeout: 5s
    retries: 5
    start_period: 5s

📝 关键参数详解(避坑指南)

很多朋友直接复制配置是没问题,但懂原理才能避免踩坑。这里重点解析几个必须注意的参数:

  1. --maxmemory 6gb(内存上限) 这是最需要根据自己服务器内存调整的地方。默认设置了 6GB,如果你的机器内存比较小,或者账号数量特别多、分组特别复杂,建议不要低于 4GB。如果设置得太小,Redis 可能会因为内存溢出而报错,导致服务无法读取缓存。

  2. --maxmemory-policy noeviction(内存淘汰策略) 这里设置为 noeviction,意思是当内存达到上限时,Redis 不会自动删除任何数据键,而是直接返回错误。对于订阅转换这种对数据准确性要求极高的场景,这样配置可以防止缓存数据意外丢失,虽然可能会牺牲一点内存,但换取了稳定性。

  3. ulimits: nofile(文件描述符限制) 将软硬限制都设为 100000。在并发量大的情况下,Redis 需要处理大量的网络连接,默认的系统限制往往不够用。调高这个参数可以防止“Too many open files”错误,确保高并发下的连接顺畅。

  4. 持久化策略 (--save ""--appendonly yes) 配置中关闭了 RDB 快照(--save ""),开启了 AOF(--appendonly yes)且每秒同步(--appendfsync everysec)。这样做的好处是减少了 RDB 生成时的 CPU 瞬间峰值,同时通过 AOF 保证了数据安全性,非常适合高并发写入场景。

💡 总结

这套配置方案目前已经合并到了 sub2api 的最新版本中。如果你正在使用或者打算搭建自己的订阅转换服务,强烈建议更新代码并应用上述配置。只要服务器内存跟得上,性能提升会非常明显,彻底告别系统负载报警的焦虑。

如果你的服务器配置较低(比如只有 2G 内存),记得务必下调 --maxmemory 的值,并密切观察日志,平衡好性能与资源占用。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭