讲师中心 微信公众号
AI工具推荐 视频效率加速

压测Workerman时发现单进程性能很高,多进程反而下降了为什么?

阿辰大大_3825

阿辰大大_3825

发布时间:2026-05-25 23:55:59

|

676人浏览过

|

来源于php中文网

原创

$worker->count合理值为物理核心数的1.2~1.8倍;IO密集型可升至2.0倍,启用reusePort后回调至1.2~1.5倍,需同步调高net.core.somaxconn并优化路由策略防单点瓶颈。

压测workerman时发现单进程性能很高,多进程反而下降了为什么?

进程数设太多导致调度开销和锁竞争上升

Workerman 多进程不是线性叠加性能的。当 $worker->count 设得远超物理核心数(比如 32 核服务器设成 64),Linux 调度器会频繁切换进程上下文,cache line 失效变多,反而拖慢整体吞吐。更关键的是,多个 Worker 进程共享某些资源时会触发锁争抢——比如共用一个 Redis 连接池、写同一个日志文件、或访问未加锁的全局静态数组。

常见表现:
– top 看到 CPU %sy(系统态)占比异常高
– strace -c -p PID 显示大量 futex 调用
– 同一时刻多个 Worker 的 onMessage 回调里都在等同一个 file_put_contents(..., FILE_APPEND)

建议值:
– 物理核心数 × 1.2 ~ 1.8(例如 16 核 → 设 18~24)
– I/O 密集型业务(如频繁调外部 HTTP)可上浮至 ×2.0
– 若启用了 $worker->reusePort = true,可回调至 ×1.2~1.5,减少端口争抢干扰

reusePort 开了但 net.core.somaxconn 没调高

开了 $worker->reusePort = true 只是让多个 Worker 都能 bind() 同一端口,但真正决定“新连接能否被内核排队接收”的,是 net.core.somaxconn 参数。默认值通常只有 128,压测时大量 SYN 包进来,超出队列长度的直接被丢弃,现象就是客户端偶发 Connection refused 或超时,看起来像“多进程没生效”。

必须同步操作:
– 运行 sudo sysctl -w net.core.somaxconn=65535
– 写入 /etc/sysctl.conf 永久生效
– 在 Workerman listen 地址中显式加 backlog 参数:tcp://0.0.0.0:8080?backlog=65535

没做连接层负载均衡,流量全打到一个 BusinessWorker

如果你用的是 GatewayWorker 架构,压测发现只有一个 BusinessWorker 在干活,大概率是 Gateway 的路由策略没配对。默认 routerBind 是按 client_id 绑定固定 Worker,如果压测工具只建了一个 client(比如单个 WebSocket 连接反复发消息),所有请求就永远只进同一个进程。

解决方法:
– 改用 routerRand:在 Gateway.php 构造函数里设 $this->router = ['\GatewayWorker\Gateway', 'routerRand']
– 或改用 routerConsistentHash(需客户端 ID 有足够离散度)
– 压测时确保并发连接数 ≥ Worker 数,避免单连接复用掩盖问题

日志、配置、初始化逻辑塞在 onWorkerStart 里

onWorkerStart 是每个 Worker 进程启动时只执行一次,但很多人把日志初始化、大配置加载、同步 SDK 实例化全堆进去。结果是:进程数越多,重复加载越严重,内存暴涨 + 启动延迟拉长,压测刚开始就卡在初始化阶段。

典型错误:
– file_get_contents('huge_config.yaml') 在 onWorkerStart 里解析
– new AliyunOssClient(...)(同步 SDK)
– error_log('start') 或 file_put_contents('log.txt', ...) 写同步日志

正确做法:
– 配置提前解析好,存为常量或静态属性
– SDK 改用协程版(如 hyperf/oss)或延迟到 onMessage 中按需创建
– 日志走 SwooleCoroutineWriteFile 或异步队列

实际压测中,多进程性能下降往往不是某一个点的问题,而是初始化、路由、系统参数、资源争抢四层叠加的结果。最容易被忽略的是 net.core.somaxconn 和 routerBind 这两个看似“配置完就没事”的项——它们不报错,但会让压测数据彻底失真。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

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

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

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

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

186

2026.05.20

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

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

202

2026.05.20

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

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

207

2026.05.20

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

0

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

0

2026.10.22

热门下载

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

精品课程

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

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

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

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn