Workerman UDP高并发怎么优化

秋雪大大_3848

秋雪大大_3848

2026-09-10

377人浏览

原创

udp在workerman中比tcp更易丢包卡顿,因net_rx软中断单核饱和或net.core.rmem_max过小导致内核直接丢包(udpinerrors上涨),而tcp有重传机制兜底;workerman的onmessage无法触发,多进程对收包无直接帮助。

workerman udp高并发怎么优化

UDP 高并发在 Workerman 里不能靠堆进程数硬扛,核心瓶颈是内核收包路径的软中断(NET_RX)单核饱和和 UDP socket 接收缓冲区溢出,必须从网卡中断绑定、socket 参数、Worker 进程协同三方面一起调。

为什么 UDP 在 Workerman 里比 TCP 更容易丢包卡顿

Workerman 的 UDP 支持基于 socket_recvfrom + select/epoll 轮询,它本身不维护连接状态,但收包效率完全依赖内核能否及时把网卡数据搬进 socket 缓冲区。一旦 NET_RX 软中断全挤在 CPU0 上,或 net.core.rmem_max 太小,新包直接被内核丢弃(netstat -s | grep "packet receive errors" 会显示 UdpInErrors 持续上涨),Workerman 根本收不到——这不是代码问题,是系统层漏包。

  • 现象:压测时客户端发包正常,服务端 ss -uul 显示 recv-q 长期 >0,netstat -sUdpInErrors 每秒涨几十上百
  • 关键区别:TCP 有重传机制兜底,UDP 丢一个就少一个;Workerman 的 onMessage 回调不会触发,你连日志都打不出来
  • 不要迷信 $worker->count:UDP 不走连接队列,多进程对收包无直接帮助,反而可能因竞争加剧缓存失效

必须改的三个内核参数和 socket 设置

Workerman 启动前要显式调大 UDP socket 的接收缓冲区,并确保内核允许应用突破默认限制。否则即使设了 SO_RCVBUF,也会被内核 silently 截断。

Arc
Arc

一款AI开发辅助工具,主要用于Arc 是一款全新的Web浏览器,基于 Chromium 架构构建,一个号称改变web历史的浏览器,适合需要提升相关任务效率的用户。

下载
  • 临时生效(验证用):sysctl -w net.core.rmem_max=26214400(25MB),sysctl -w net.core.rmem_default=4194304(4MB)
  • 永久生效:写入 /etc/sysctl.conf 并执行 sysctl -p
  • Workerman 代码中必须显式设置(放在 new Worker() 之后、Worker::runAll() 之前):
    if (function_exists('socket_set_option')) {
        $worker->setSocketOption(SOL_SOCKET, SO_RCVBUF, 4194304);
    }
  • 注意:Linux 默认 net.core.rmem_max=212992(208KB),远低于高并发 UDP 场景需求;不调这个,SO_RCVBUF 设再大也白搭

网卡中断必须手动绑到多个 CPU,且禁用 irqbalance

UDP 收包比 TCP 更吃软中断,因为没连接状态要维护,纯靠中断驱动搬运数据。现代多队列网卡(如 ixgbei40e)的每个 RX 队列对应一个 IRQ,必须把它们分散到不同 CPU,否则 CPU0 一满,所有包等死。

  • 确认多队列启用:ethtool -l eth0Combined 最大值(比如 8),再 ls /sys/class/net/eth0/device/msi_irqs/ 看是否真有 8 个 IRQ 目录
  • 查当前分布:cat /proc/interrupts | grep eth0 | head -5,观察每行末尾各 CPU 计数是否严重倾斜
  • 手动绑定(以 IRQ 40-47 绑定到 CPU0-7 为例):for i in {40..47}; do echo 0-$((i-40)) > /proc/irq/$i/smp_affinity_list; done
  • 关掉 irqbalancesystemctl stop irqbalance && systemctl disable irqbalance,自动均衡在高吞吐下反而抖动
  • 验证:watch -n1 'cat /proc/interrupts | grep eth0',压测时各 CPU 计数应基本均匀

Workerman 进程数与 reusePort 协同策略

UDP 场景下 $worker->reusePort = true 是刚需,但它和进程数配置必须匹配,否则反而引发端口争抢或负载不均。

  • $worker->count 应等于你绑定的 CPU 核数(比如绑了 CPU0-3,就设为 4),让每个 Worker 进程独占一个核处理收包+业务逻辑,避免跨核缓存同步开销
  • 必须开启 $worker->reusePort = true,否则所有进程竞争同一个 socket,内核无法做负载分发
  • 禁止用 SO_REUSEADDR 替代:reusePort 是 Linux 3.9+ 特性,能真正实现内核级分发;SO_REUSEADDR 只解决 TIME_WAIT 端口复用,对 UDP 分发无效
  • 示例:
    $udp_worker = new Worker("udp://0.0.0.0:9502");
    $udp_worker->count = 4;
    $udp_worker->reusePort = true;
    $udp_worker->onMessage = function($connection, $data) {
        // 业务逻辑要极轻量,避免阻塞事件循环
        $connection->send("ACK");
    };

最容易被忽略的是:UDP 优化效果没法靠 abwrk 测,得用真实发包工具(如 nping 或自研 client)持续发包并监控 UdpInErrors;另外,业务逻辑哪怕只加一行 sleep(0.001),都会让整个事件循环卡住,导致后续包堆积在 socket 缓冲区直至溢出——UDP 的脆弱性远超 TCP,容错空间几乎为零。

相关文章

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

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

下载

相关标签:

workerman

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

相关专题

更多
tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.25

403

5

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

2023.08.08

2211

5

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

2024.11.14

2549

8

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

热门下载

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

精品课程

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

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

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

共0课时 | 0人学习