Workerman连接数过高应该如何优化处理

胖强小哥_2800

胖强小哥_2800

2026-06-29

534人浏览

原创

本质是系统文件描述符耗尽或内核网络栈瓶颈,需先查进程fd限制与占用、再查软中断分布,分层调大ulimit、配置systemd/supervisord、合理设置maxconnections与worker count,并启用reuseport及分散网卡中断亲和性。

workerman连接数过高应该如何优化处理

Workerman连接数过高导致新连接被拒绝、ESTABLISHED堆积、响应延迟飙升,本质是系统文件描述符耗尽或内核网络栈瓶颈触发的连锁反应,不是单纯调大maxConnections就能解决。

确认真实瓶颈在哪

先查进程实际可用fd上限,别信配置文件:用cat /proc/$(pgrep -f "start.php" | head -1)/limits | grep "Max open files",输出两列数字——左边是软限制,右边是硬限制。【软限制必须≤硬限制,否则启动时会被截断】

再看当前fd占用:用lsof -p $(pgrep -f "start.php" | head -1) | wc -l,如果接近或等于上一步查出的软限制值,说明确实是fd耗尽;如果远低于该值但连接已卡死,就要查网卡软中断是否单核打满(top看si%是否持续>30%且只集中在CPU0)。

分层调整系统文件描述符限制

方法一:临时生效(仅用于测试或紧急恢复)
在启动Workerman前执行:ulimit -n 65535,然后运行php start.php start -d。这步操作起来很简单,但重启shell后失效。

方法二:永久生效(生产环境必须做)
① 编辑/etc/security/limits.conf,追加两行:
www-data soft nofile 65535
www-data hard nofile 65535
② 如果用systemd管理,还需编辑/etc/systemd/system/workerman.service,在[Service]段下加LimitNOFILE=65535。
【改完必须重启Workerman主进程,reload不生效,因为fd限制只在fork时读取一次】

方法三:绕过PAM限制(supervisord或crontab启动时必做)
supervisord配置中不能只写command=php start.php start -d,要改成:
command=/bin/sh -c "ulimit -n 65535 && php start.php start -d"。

收紧Workerman自身连接控制

设$worker->maxConnections为系统可用fd的70%~80%,例如cat /proc/$(pgrep -f "start.php"|head -1)/limits | awk '{print }' | head -1查出硬限制是65535,则设$worker->maxConnections = 52428。【不要设成65535——定时器、日志句柄、DNS查询也要占fd,留余量才能稳住】

超能文献
超能文献

超能文献是一款面向医学和多学科学术研究的 AI 文献搜索与文档翻译平台。

下载

同时检查$worker->count是否合理:用nproc查CPU核心数,设为1.5倍左右。4核机器设6个进程,16核设24个,再多反而因调度开销拖慢吞吐。

启用$worker->reusePort = true,让内核直接把新连接均匀分发到各Worker进程,避免默认队列竞争导致的分配倾斜。

释放网卡软中断压力

第一步:确认网卡是否支持多队列,执行ethtool -l eth0(把eth0换成你的网卡名),看Combined最大值是否>1。

第二步:查当前中断分布,执行cat /proc/interrupts | grep eth0,观察每行末尾各CPU计数是否严重不均。

第三步:手动绑定中断到多个CPU,例如将IRQ 45绑定到CPU0-3:echo 0-3 > /proc/irq/45/smp_affinity_list(需root权限)。绑定前先停掉irqbalance服务,避免它动态抢改。

第四步:压测验证,运行watch -n1 'cat /proc/interrupts | grep eth0',看到各CPU列计数逐步趋近均匀,说明软中断负载已分散。

相关文章

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

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

下载

相关标签:

workerman

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

相关专题

更多
开发工具有哪些
开发工具有哪些

开发工具有:1、集成开发环境IDE;2、版本控制系统VCS;3、自动化构建工具;4、测试工具;5、代码分析工具。本专题为大家提供开发工具有哪些的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2606

5

Workerman安装配置教程
Workerman安装配置教程

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

2026.05.20

186

15

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

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

2026.05.20

202

12

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

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

2026.05.20

207

13

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

0

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

0

15

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

2026.10.16

0

15

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

0

20

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

2026.10.15

0

18

热门下载

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

精品课程

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

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

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

共0课时 | 0人学习