swoole 5.x 的 max_connection 是受文件描述符、内存、协程栈、连接保活共同约束的软性配置,非单纯内存决定;需结合 ulimit -n、可用内存与连接特征综合设定,推荐2核4gb设8000–10000、4核8gb设20000–25000,并同步调高系统文件数限制。

Swoole 5.x 的 max_connection 并不是单纯由内存决定的硬性上限,而是受可用文件描述符(fd)数量、内存占用、协程栈大小、连接保活行为共同约束的软性配置值。它不等于“能同时在线的用户数”,而更接近“服务端可维护的活跃连接槽位总数”。估算时需从内存反推,但必须结合实际连接特征。
内存消耗主要来自三部分
- 每个连接的基础开销:约 12–18 KB(含协程栈默认 256 KB → 实际仅按需增长,活跃连接平均占 32–64 KB;TCP 连接结构体、SSL 上下文等固定开销约 8–10 KB)
-
Redis/MySQL 连接池额外占用:若启用连接池,每个池子每预创建连接额外增加 2–5 KB,与
max_connection无关,但影响总内存 - Swoole 自身管理开销:约 30–50 MB 固定占用(调度器、共享内存、定时器等),不随连接线性增长
✅ 简单估算公式(适用于中等负载、无 TLS、短消息为主的聊天场景):
可用连接数 ≈ (可用内存 × 0.7) ÷ 单连接平均内存
其中「可用内存」指专用于 Swoole Worker 进程的物理内存(非系统总内存),建议预留 2 GB 给系统和 PHP 主进程。
不同规格服务器推荐配置(基于 2026 年主流云主机)
-
2 核 4 GB(如阿里云共享型 s6)
- 可用内存约 2.8 GB → 推荐
max_connection = 8000–10000 - 同时需调高系统
ulimit -n至 ≥ 12000,并确认/proc/sys/fs/file-max≥ 20000 - 注意:此时单连接平均内存应控制在 ≤ 300 KB(关闭 debug 日志、禁用 SSL、协程栈设为 128 KB)
- 可用内存约 2.8 GB → 推荐
-
4 核 8 GB(主流生产推荐起步配置)
Swoole 6.1.1下载Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 可用内存约 6 GB → 推荐
max_connection = 20000–25000 - 配合
worker_num = 4(匹配 CPU 核数)、task_worker_num = 4 - 若开启 TLS(如 WSS),单连接内存升至 450–600 KB,上限需下调至 14000–18000
- 可用内存约 6 GB → 推荐
-
8 核 16 GB 及以上
- 不建议盲目拉高
max_connection超过 40000 - 更有效的方式是横向扩展多个 Swoole 实例 + Redis Pub/Sub 做集群通信
- 单机超 30000 连接后,epoll wait 延迟、定时器精度、心跳包响应抖动会明显上升,需配合
heartbeat_idle_time和heartbeat_check_interval精细调优
- 不建议盲目拉高
必须同步调整的关键系统参数
# 临时生效(重启失效) ulimit -n 100000 echo 'fs.file-max = 200000' >> /etc/sysctl.conf sysctl -p # 永久生效还需修改 /etc/security/limits.conf * soft nofile 100000 * hard nofile 100000
Swoole 启动时可通过 swoole_get_local_ip() 和 swoole_get_local_port() 辅助验证是否成功加载配置,运行中用 ss -s 查看当前 socket 使用量,比 netstat 更轻量准确。










