Workerman TCP高并发怎么优化

雨雪吖_5962

雨雪吖_5962

2026-09-09

879人浏览

原创

$worker->count=8后吞吐下降主因是未启用reuseport导致accept单点瓶颈,需设$worker->reuseport=true、监听0.0.0.0、调优somaxconn及分散网卡中断亲和性。

workerman tcp高并发怎么优化

Workerman TCP 高并发不是靠堆进程数硬扛,而是要让每个连接真正“不卡住”——从内核收包、进程分发、事件循环到业务处理,整条链路都不能有单点阻塞。

为什么 $worker->count = 8 后吞吐反而下降?

多进程不是越多越好。Workerman 主进程监听端口后,用 accept() 把新连接分发给子进程;但如果没启用 reusePort,所有 SYN 包都得排队等主进程调用 accept(),而这个操作默认只能由一个 CPU 核处理,变成软中断瓶颈。

  • 现象:top 里 si% 持续 >40%,且集中在单个 CPU;ss -s 显示 recv-q 不断上涨
  • 必须加:$worker->reusePort = true;(注意:PHP ≥ 7.2 且 Linux ≥ 3.9)
  • 同时确保监听地址是 tcp://0.0.0.0:xxxx,不是 127.0.0.1 ——后者直接废掉多核并行能力
  • $worker->count 建议设为 CPU 物理核心数(非超线程数),压测后再微调;超过 8 通常收益递减

连接建立阶段就超时(Connection timed out)怎么定位?

这不是 PHP 代码问题,是连接根本没进到 Workerman。高并发下最常见三个断点:

吐司AI高清
吐司AI高清

吐司AI高清是一款AI图片处理工具,Toast AI 推出的图像超分辨率/修复工具。

下载
  • 本地端口耗尽:net.ipv4.ip_local_port_range 默认只有 32768–65535,短连接密集时快速占满;改宽:`sysctl -w net.ipv4.ip_local_port_range="1024 65535"`
  • SYN 队列溢出:内核参数 net.core.somaxconn 默认常为 128,远不够;应设为 `65535` 并同步调大 listen() 的 backlog(Workerman 内部已设为 65535,但系统层必须跟上)
  • 云平台限速:阿里云/腾讯云对单 IP 新建连接数(conn/s)有隐式限制,间歇性超时大概率是它;需提工单申请提升配额,或做客户端连接复用

业务逻辑里哪些写法会让 TCP 连接“假活真堵”?

Workerman 的 onMessage 回调一旦执行同步阻塞操作,整个 Worker 进程的事件循环就停摆,其他连接全部卡住。

  • 绝对禁止:file_get_contents()sleep()、同步 MySQL 查询(mysqli_query)、curl_exec()
  • 必须换异步方案:workerman/mysql 客户端、workerman/http-clientAsyncTcpConnection
  • 耗时任务立刻扔进队列:用 Redis + php-resqueamqp 异步处理,onMessage 只负责快速响应 ACK
  • 心跳别用 ping/pong 轮询:改用 $connection->getTimer()->add(30, function() { ... }) 主动检测,避免连接堆积

为什么开了 libevent 还是卡在 10 万连接?

Worker::$globalEvent = 'libevent' 确实能提升单进程事件轮询效率,但它不解决底层资源瓶颈。

  • 先检查 ulimit -n:必须 ≥ 连接数 × 2(每个连接至少占 2 个 fd),建议设为 1048576
  • 确认 opcache.enable=1opcache.memory_consumption ≥ 256M,否则每次请求都重编译脚本
  • 禁用所有非必要扩展(如 xdebug、blackfire),它们会让 event loop 延迟显著上升
  • 最关键的遗漏项:网卡多队列中断没分散。用 cat /proc/interrupts | grep eth0 看 IRQ 是否全落在 CPU0;需手动绑定到多个 CPU,例如:echo 0-3 > /proc/irq/123/smp_affinity_list

真正的瓶颈往往不在 PHP 代码里,而在 /proc/sys/net 的某个参数、网卡驱动的中断亲和性、或者云厂商没明说的连接新建速率限制。调优不是改完配置就完事,而是每改一项,都用 ss -scat /proc/interruptsstrace -p [pid] 实时验证效果。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

workerman

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

2026.05.20

126

15

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

2026.05.20

162

12

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

2026.05.20

127

13

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

140

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

60

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

40

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

360

28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习